@rtrvr-ai/rover 2.0.0 → 2.0.2
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.
- package/README.md +127 -17
- package/dist/embed.js +202 -60
- package/dist/index.d.ts +14 -2
- package/dist/rover.js +202 -60
- package/dist/worker/rover-worker.js +13 -13
- package/package.json +33 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Ve=class{tools=new Map;registerTool(t){t?.name&&this.tools.set(t.name,t)}getTool(t){return this.tools.get(t)}getToolFunctions(){let t={};for(let[n,r]of this.tools.entries())t[n]=r;return t}getFunctionDeclarations(){let t=[];for(let n of this.tools.values()){if(n.llmCallable===!1)continue;let r=n.schema??Vn(n.parameters||{},n.required||[]);t.push({name:n.name,description:n.description,parameters:r})}return t}};function Vn(e,t=[]){let n={};for(let[r,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let s=String(o.type||"string"),a={type:bt(s),description:o.description,nullable:!t.includes(r)};if(s==="array"&&o.items&&(a.items={type:bt(o.items.type||"string"),description:o.items.description}),s==="object"&&o.properties){a.properties={};for(let[c,i]of Object.entries(o.properties))a.properties[c]={type:bt(i?.type||"string"),description:i?.description};Array.isArray(o.required)&&(a.required=o.required)}n[r]=a}return{type:"object",properties:n,required:t}}function bt(e){switch(e){case"string":case"number":case"integer":case"boolean":case"array":case"object":return e;default:return"string"}}var Ye;(function(e){e.FLASH_LITE="Gemini Flash Lite",e.FLASH="Gemini Flash",e.PRO="Gemini Pro"})(Ye||(Ye={}));var $t;(function(e){e[e.NativeHostConnected=0]="NativeHostConnected",e[e.NativeHostDisconnected=1]="NativeHostDisconnected"})($t||($t={}));var Ue="rtrvr_mem_",Yn=["image/png","image/jpeg","image/webp"],Qn=["application/pdf","text/plain"],ds=[...Yn,...Qn];var U;(function(e){e.ACT="act_on_tab",e.CRAWL="crawl_and_extract_from_tab",e.EXTRACT="extract_from_tab",e.SHEETS_WORKFLOW="sheets_workflow",e.INFER_SHEET_DATA="infer_sheet_data",e.GRAPHBOT="graph_bot",e.PDF_FILLER="pdf_filler",e.CUSTOM_TOOL_GENERATOR="custom_tool_generator",e.WEBPAGE_GENERATOR="webpage_generator",e.GOOGLE_DOC_GENERATOR="google_doc_generator",e.GOOGLE_SLIDES_GENERATOR="google_slides_generator",e.PROCESS_TEXT="process_text",e.CREATE_SHEET_FROM_DATA="create_sheet_from_data",e.ROVER_EXTERNAL_READ_CONTEXT="rover_external_read_context",e.ROVER_EXTERNAL_ACT_CONTEXT="rover_external_act_context",e.CONFIGURE_API_KEY="configure_api_key",e.TASK_COMPLETE="task_complete",e.ASK_USER="ask_user",e.EXECUTE_MULTIPLE_TOOLS="execute_multiple_tools",e.QUERY_RTRVR_AI_DOCUMENTATION="query_rtrvr_ai_documentation"})(U||(U={}));var X;(function(e){e.PLANNER="Planner",e.AGENTIC_SEEK="Agentic Action",e.CRAWL_PAGES="Crawl Pages",e.EXTRACT_PAGE="Extract Page",e.SHEETS_WORKFLOW="Sheets Workflow",e.INFER_SHEET_DATA="Infer Sheet Data",e.MULTI_STEPS="Multi Steps",e.PDF_FILLER="PDF Filler",e.CUSTOM_TOOL_GENERATOR="Custom Tool Generator",e.WEBPAGE_GENERATOR="WebPage Generator",e.GOOGLE_DOC_GENERATOR="Google Doc Generator",e.GOOGLE_SLIDES_GENERATOR="Google Slides Generator",e.PROCESS_TEXT="Process Text",e.CREATE_SHEET_FROM_DATA="Create Sheet From Data",e.ROVER_EXTERNAL_READ_CONTEXT="Rover External Read Context",e.ROVER_EXTERNAL_ACT_CONTEXT="Rover External Act Context",e.EXECUTE_MULTIPLE_TOOLS="Execute Multiple User Tools",e.CONFIGURE_API_KEY="Configure Gemini API Key",e.QUERY_RTRVR_AI_DOCUMENTATION="query_rtrvr_ai_documentation"})(X||(X={}));var fs={[U.ACT]:X.AGENTIC_SEEK,[U.CRAWL]:X.CRAWL_PAGES,[U.EXTRACT]:X.EXTRACT_PAGE,[U.SHEETS_WORKFLOW]:X.SHEETS_WORKFLOW,[U.INFER_SHEET_DATA]:X.INFER_SHEET_DATA,[U.PDF_FILLER]:X.PDF_FILLER,[U.CUSTOM_TOOL_GENERATOR]:X.CUSTOM_TOOL_GENERATOR,[U.WEBPAGE_GENERATOR]:X.WEBPAGE_GENERATOR,[U.GOOGLE_DOC_GENERATOR]:X.GOOGLE_DOC_GENERATOR,[U.GOOGLE_SLIDES_GENERATOR]:X.GOOGLE_SLIDES_GENERATOR,[U.PROCESS_TEXT]:X.PROCESS_TEXT,[U.CREATE_SHEET_FROM_DATA]:X.CREATE_SHEET_FROM_DATA,[U.ROVER_EXTERNAL_READ_CONTEXT]:X.ROVER_EXTERNAL_READ_CONTEXT,[U.ROVER_EXTERNAL_ACT_CONTEXT]:X.ROVER_EXTERNAL_ACT_CONTEXT,[U.EXECUTE_MULTIPLE_TOOLS]:X.EXECUTE_MULTIPLE_TOOLS,[U.CONFIGURE_API_KEY]:X.CONFIGURE_API_KEY,[U.QUERY_RTRVR_AI_DOCUMENTATION]:X.QUERY_RTRVR_AI_DOCUMENTATION},yt=20;var Ht=Ye.FLASH;var ps=X.PLANNER;var gs=20*1024*1024;var Jn=()=>typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;function Qe(e){return(e||"").trim()||"Data"}function qt(e,t){return e.length>=t?e:[...e,...new Array(t-e.length).fill("")]}function St(e,t){if(e.length===t)return e;if(e.length>t)return e.slice(0,t);let n=e.slice();for(;n.length<t;)n.push("");return n}function jt(e){return e?.properties?Object.keys(e.properties):[]}function Wt(e){try{return new TextEncoder().encode(JSON.stringify(e)).length}catch{return 0}}function Zn(e){return!e||typeof e!="object"?!1:"properties"in e||"anyOf"in e||"type"in e}var de=class{label;memSheets=new Map;constructor(t){this.label=t}createSheet(t,n){let r=`${Ue}${Jn()}`;return this.createSheetWithId(r,t,n)}createSheetWithId(t,n,r){let o=Date.now(),s={id:t,title:Qe(n),tabs:new Map,tabTitleToIndex:new Map,nextTabIndex:0,createdAt:o,updatedAt:o,meta:r};return this.memSheets.set(t,s),this.addTab(t,{title:s.title||"Data",headerRow:[],data:[]}),s}getOrCreateSheet(t,n,r){return t&&this.memSheets.has(t)?this.memSheets.get(t):t&&t.startsWith(Ue)?(console.warn(`[TabularStore] getOrCreateSheet: memory sheet ${t} not found. Recreating empty sheet.`),this.createSheetWithId(t,n,r)):this.createSheet(n||t,r)}hasSheet(t){return this.memSheets.has(t)}getSheet(t){let n=this.memSheets.get(t);if(!n)throw new Error(`Memory sheet not found: ${t}`);return n}deleteSheet(t){return this.memSheets.delete(t)}listSheets(){return[...this.memSheets.values()]}clearAll(){this.memSheets.clear()}addTab(t,n){let r=this.getSheet(t),o=r.nextTabIndex++,s=Date.now(),a=this.makeUniqueTabTitle(r,n.title),c={index:o,title:a,headerRow:n.headerRow||[],data:n.data||[],schema:n.schema,createdAt:s,updatedAt:s,meta:n.meta};return r.tabs.set(o,c),r.tabTitleToIndex.set(a.toLowerCase(),o),r.updatedAt=s,c}getTab(t,n=0){let o=this.getSheet(t).tabs.get(n);if(!o)throw new Error(`Memory tab not found: ${t}/tab/${n}`);return o}getTabByTitle(t,n){let r=this.memSheets.get(t);if(!r)return null;let o=r.tabTitleToIndex.get(n.toLowerCase());return o===void 0?null:r.tabs.get(o)??null}hasTab(t,n){let r=this.memSheets.get(t);return!!r&&r.tabs.has(n)}getTabByIndex(t,n=0){let r=this.memSheets.get(t);return r?r.tabs.get(n)??null:null}ensureTab(t,n,r={}){let o=this.getSheet(t),s=Qe(n),a=this.getTabByTitle(t,s);if(a)return a;if(r.createIfMissing??!0)return this.addTab(t,{title:s,headerRow:[],data:[]});let c=this.getTabByIndex(t,0);return c||this.addTab(t,{title:s,headerRow:[],data:[]})}makeUniqueTabTitle(t,n,r){let o=Qe(n),s=o.toLowerCase(),a=t.tabTitleToIndex.get(s);if(a===void 0||a===r)return o;let c=2;for(;t.tabTitleToIndex.has(`${o} (${c})`.toLowerCase());)c++;return`${o} (${c})`}renameTab(t,n,r){let o=this.getSheet(t),s=this.getTab(t,n),a=s.title.toLowerCase(),c=Qe(r);if(c.toLowerCase()===a){s.title=c,s.updatedAt=Date.now(),o.updatedAt=s.updatedAt,o.tabTitleToIndex.set(a,n);return}o.tabTitleToIndex.delete(a);let u=this.makeUniqueTabTitle(o,c,n);s.title=u,s.updatedAt=Date.now(),o.tabTitleToIndex.set(u.toLowerCase(),n),o.updatedAt=s.updatedAt}deleteTab(t,n){let r=this.getSheet(t),o=r.tabs.get(n);return o?(r.tabTitleToIndex.delete(o.title.toLowerCase()),r.tabs.delete(n),r.updatedAt=Date.now(),!0):!1}listTabs(t){return[...this.getSheet(t).tabs.values()].sort((r,o)=>r.index-o.index)}setHeaderRow(t,n,r){let o=this.getTab(t,n);o.headerRow=r.map(String),o.data=o.data.map(s=>St(s,o.headerRow.length)),o.updatedAt=Date.now(),this.touchSheet(t)}mergeHeaderRow(t,n,r){let o=this.getTab(t,n),s=o.headerRow.length,a=new Set(o.headerRow.map(i=>i.toLowerCase()));for(let i of r){let u=String(i).toLowerCase();a.has(u)||(o.headerRow.push(String(i)),a.add(u))}let c=o.headerRow.length;return c>s&&(o.data=o.data.map(i=>qt(i,c))),o.updatedAt=Date.now(),this.touchSheet(t),o.headerRow}setSchema(t,n,r,o={}){let s=this.getTab(t,n);if(s.schema=r,!o.preserveHeader&&r?.properties){let a=jt(r);if(a.length){let c=s.headerRow;if(!c.length)s.headerRow=a.slice();else{let u=new Set(a.map(d=>d.toLowerCase())),l=[];for(let d of a)l.push(d);for(let d of c)u.has(d.toLowerCase())||l.push(d);s.headerRow=l}let i=s.headerRow.length;s.data=s.data.map(u=>St(u,i))}}s.updatedAt=Date.now(),this.touchSheet(t)}appendRows(t,n,r,o={}){let s=this.getTab(t,n),a=o.alignToHeader!==!1,c=s.headerRow.length;for(let i of r){let u=a&&c>0?St(i,c):i.slice();s.data.push(u)}s.updatedAt=Date.now(),this.touchSheet(t)}upsertColumnsByHeader(t,n,r,o,s={}){let a=this.getTab(t,n),c=s.createMissingHeaders??!0,i=new Map;a.headerRow.forEach((d,f)=>i.set(d,f));for(let d of Object.keys(o))if(!i.has(d)){if(!c)continue;let f=a.headerRow.length;a.headerRow.push(d),i.set(d,f),a.data=a.data.map(m=>qt(m,a.headerRow.length))}let u=a.headerRow.length;for(;a.data.length<=r;)a.data.push(new Array(u).fill(""));let l=a.data[r];for(let[d,f]of Object.entries(o)){let m=i.get(d);m!==void 0&&(l[m]=f)}a.updatedAt=Date.now(),this.touchSheet(t)}toAny2D(t,n=0,r=!0){let o=this.getTab(t,n),s=o.data.map(a=>a.slice());return r?[o.headerRow.slice(),...s]:s}toObjects(t,n=0,r={}){let o=this.getTab(t,n),s=o.headerRow,a=r.maxRows??o.data.length,c=[];for(let i=0;i<o.data.length&&i<a;i++){let u=o.data[i],l={};for(let d=0;d<s.length;d++)l[s[d]]=u[d];c.push(l)}return c}toSheetInfo(t,n=0){let r=this.getSheet(t),o=this.getTab(t,n);return{sheetId:t,sheetTitle:r.title,sheetTab:o.title,sheetTabId:o.index,sheetTabs:this.listTabs(t).map(s=>({id:s.index,title:s.title})),kind:"memory"}}publishFromObjects(t,n,r={}){let o=t.headerRow||t.headingInfo.headings||Object.keys(t.headingInfo.schema?.properties??{}),s=n.map(c=>o.map(i=>c[i]??"")),a=o.length?[o,...s]:s;return this.publishFromSheetWorkflow(t,a,r)}publishFromSheetWorkflow(t,n,r={}){let o=t.sheetInfo,s=r.sheetTitle||t.headingInfo.title||o?.sheetTitle||"Data",a=r.tabTitle||o?.newTabTitle||o?.sheetTab||"Data",c=r.schema||t.headingInfo.schema,i=jt(c),u=this.getOrCreateSheet(o?.sheetId&&o.sheetId.startsWith(Ue)?o.sheetId:void 0,s),l=this.ensureTab(u.id,a,{createIfMissing:!0}),d=r.mergeWithExistingHeader??!0,f=l.headerRow.length>0;i.length?f&&d?this.mergeHeaderRow(u.id,l.index,i):this.setHeaderRow(u.id,l.index,i):t.headerRow?.length&&(f&&d?this.mergeHeaderRow(u.id,l.index,t.headerRow):this.setHeaderRow(u.id,l.index,t.headerRow)),this.setSchema(u.id,l.index,c,{preserveHeader:!0});let m=this.getTab(u.id,l.index).headerRow,T=n.length&&m.length&&n[0].length===m.length&&n[0].every((k,b)=>String(k).trim().toLowerCase()===m[b].trim().toLowerCase())?n.slice(1):n;return this.appendRows(u.id,l.index,T,{alignToHeader:r.alignToHeader??!0}),t.sheetInfo={sheetId:u.id,sheetTitle:u.title,sheetTab:l.title,sheetTabId:l.index,sheetTabs:this.listTabs(u.id).map(k=>({title:k.title,id:k.index})),kind:"memory"},t.headerRow=m,t.headingInfo.headings=m,t}publishNewTab(t,n,r,o,s){let a;s?Zn(s)&&!("sheetTitle"in s)?a={schema:s}:a=s:a={};let c=this.getOrCreateSheet(t),i,u=a.mergeWithExistingHeader??!0;if(a.createTabIfMissing===!1){let l=this.getTabByTitle(c.id,n);l?(i=l,i.headerRow.length?u&&this.mergeHeaderRow(c.id,i.index,r):this.setHeaderRow(c.id,i.index,r)):i=this.addTab(c.id,{title:n,headerRow:r,data:[],schema:a.schema,meta:void 0})}else i=this.addTab(c.id,{title:n,headerRow:r,data:[],schema:a.schema,meta:void 0});return this.appendRows(c.id,i.index,o,{alignToHeader:a.alignToHeader??!0}),i}estimateTabSizeBytes(t,n=0){let r=this.getTab(t,n),o=Wt(r.headerRow),s=r.data,a=500,c=0,i=Math.min(s.length,a);for(let u=0;u<i;u++)c+=Wt(s[u]);return s.length>i&&i>0&&(c=Math.round(c*(s.length/i))),o+c}touchSheet(t){let n=this.memSheets.get(t);n&&(n.updatedAt=Date.now())}},fe=e=>!!e&&e.startsWith(Ue);function Bt(e){let t=String(e||"").toLowerCase();return t.includes("stale_seq")||t.includes("stale seq")?"STALE_SEQ":t.includes("stale_epoch")||t.includes("stale epoch")?"STALE_EPOCH":t.includes("session token")&&t.includes("expired")?"SESSION_TOKEN_EXPIRED":t.includes("session token")&&t.includes("invalid")?"SESSION_TOKEN_INVALID":t.includes("bootstrap")&&t.includes("required")?"BOOTSTRAP_REQUIRED":t.includes("navigation handoff")?"NAVIGATION_HANDOFF_PENDING":(t.includes("auth token")||t.includes("authentication token"))&&(t.includes("missing")||t.includes("required"))?"MISSING_AUTH_TOKEN":t.includes("missing auth")||t.includes("requires auth")||t.includes("requires authentication")?"MISSING_AUTH":t.includes("api key")&&(t.includes("missing")||t.includes("required"))?"MISSING_API_KEY":t.includes("invalid")&&t.includes("api key")?"INVALID_API_KEY":t.includes("unauthenticated")||t.includes("authentication")?"UNAUTHENTICATED":t.includes("permission")?"PERMISSION_DENIED":t.includes("insufficient credits")||t.includes("credits")?"INSUFFICIENT_CREDITS":t.includes("not supported")||t.includes("unsupported")?"TOOL_UNSUPPORTED":t.includes("network")||t.includes("fetch")?"NETWORK_ERROR":"UNKNOWN_ERROR"}function Je(e){if(e==="MISSING_AUTH"||e==="MISSING_AUTH_TOKEN")return"Provide a valid rvrsess_* sessionToken from /v2/rover/session/open in rover.boot(...).";if(e==="MISSING_API_KEY")return"Use a Rover session token (rvrsess_*) from /v2/rover/session/open.";if(e==="INVALID_API_KEY")return"Use a valid active Rover session token or rotate your site public key.";if(e==="STALE_SEQ")return"Sync session projection and retry with latest seq.";if(e==="STALE_EPOCH")return"Refresh session token/projection and retry with latest epoch.";if(e==="SESSION_TOKEN_EXPIRED")return"Refresh session via /v2/rover/session/open using bootstrap public key (pk_site_*), then retry.";if(e==="SESSION_TOKEN_INVALID")return"Initialize a fresh session token via /v2/rover/session/open and retry.";if(e==="BOOTSTRAP_REQUIRED")return"Provide a valid pk_site_* key in bootstrapToken/publicKey and retry session start.";if(e==="NAVIGATION_HANDOFF_PENDING")return"Wait for post-navigation hydration/projection sync and retry."}function Y(e,t="Operation failed"){let n=String(e?.error||"").trim().toLowerCase();if(n==="stale_seq"||n==="stale_epoch"||n==="session_token_expired"||n==="session_token_invalid"||n==="bootstrap_required"){let i=n==="stale_epoch"?"STALE_EPOCH":n==="session_token_expired"?"SESSION_TOKEN_EXPIRED":n==="session_token_invalid"?"SESSION_TOKEN_INVALID":n==="bootstrap_required"?"BOOTSTRAP_REQUIRED":"STALE_SEQ",u=e?.data&&typeof e.data=="object"?e.data:{},l=typeof u?.reason=="string"?u.reason:n==="stale_epoch"?"Session epoch is stale.":n==="session_token_expired"?"Session token expired.":n==="session_token_invalid"?"Session token invalid.":n==="bootstrap_required"?"Bootstrap token required.":"Run sequence is stale.";return{code:i,message:l,next_action:Je(i),retryable:i==="STALE_SEQ"||i==="STALE_EPOCH"||i==="SESSION_TOKEN_EXPIRED",details:e}}let r=e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"?e:void 0,o=e?.roverError||e?.errorDetails||(typeof e?.error=="object"?e.error:void 0)||r;if(o&&typeof o=="object"&&o.code&&o.message){let i=String(o.code||"").trim(),l=i==="stale_seq"?"STALE_SEQ":i==="stale_epoch"?"STALE_EPOCH":i==="session_token_expired"?"SESSION_TOKEN_EXPIRED":i==="session_token_invalid"?"SESSION_TOKEN_INVALID":i==="bootstrap_required"?"BOOTSTRAP_REQUIRED":i==="navigation_handoff_pending"?"NAVIGATION_HANDOFF_PENDING":i,d=typeof o.retryable=="boolean"?o.retryable:l==="STALE_SEQ"||l==="STALE_EPOCH"||l==="SESSION_TOKEN_EXPIRED"||l==="NAVIGATION_HANDOFF_PENDING";return{code:l,message:o.message,requires_api_key:!!o.requires_api_key,missing:Array.isArray(o.missing)?o.missing:void 0,next_action:o.next_action||Je(l),retryable:d,degraded:o.degraded,details:o.details}}if(typeof e=="string"){let i=e||t,u=Bt(i);return{code:u,message:i,requires_api_key:u==="MISSING_API_KEY"||u==="INVALID_API_KEY",missing:u==="MISSING_AUTH"||u==="MISSING_AUTH_TOKEN"?["authToken"]:void 0,next_action:Je(u),retryable:u==="NETWORK_ERROR"||u==="STALE_SEQ"||u==="STALE_EPOCH"||u==="SESSION_TOKEN_EXPIRED"||u==="NAVIGATION_HANDOFF_PENDING"}}let s=String(e?.message||e?.error||t),a=Bt(s),c=a==="MISSING_API_KEY"||a==="INVALID_API_KEY";return{code:a,message:s,requires_api_key:c,missing:c?["publicKey"]:a==="MISSING_AUTH"||a==="MISSING_AUTH_TOKEN"?["authToken"]:void 0,next_action:Je(a),retryable:a==="NETWORK_ERROR"||a==="STALE_SEQ"||a==="STALE_EPOCH"||a==="SESSION_TOKEN_EXPIRED"||a==="NAVIGATION_HANDOFF_PENDING",details:e}}function we(e){let t=new Error(e.message);return t.roverError=e,t}function Kt(e){let t=Y(e);return!!t.requires_api_key||t.code==="MISSING_API_KEY"||t.code==="INVALID_API_KEY"}var Yt="https://extensionrouter.rtrvr.ai",er=new Set(["generate_sheets","generate_docs","generate_slides","generate_websites"]),tr={generate_pdfs:"generate_docs",pdf_filling:"generate_docs",generate_web_pages:"generate_websites"},zt={enableExternalWebContext:!1,scrapeMode:"off"};function nr(e){if(!e)return;let t=Array.isArray(e.enableAdditionalTools)?e.enableAdditionalTools:[],n=Array.from(new Set(t.map(r=>{let o=tr[r]||r;return er.has(o)?o:null}).filter(r=>!!r)));return{mode:e.mode||"none",userDefined:Array.isArray(e.userDefined)?e.userDefined:[],enableAdditionalTools:n}}function Xt(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let o=String(r||"").trim().toLowerCase().replace(/^\./,"");!o||t.has(o)||(t.add(o),n.push(o))}return n}function Qt(e){let t=String(e||"").trim();if(t)return t.slice(0,64)}function rr(e){try{return new URL(String(e||"")).hostname.toLowerCase()}catch{return}}function Vt(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return!1;if(n==="*")return!0;if(n.startsWith("*.")){let r=n.slice(2);return!!r&&(e===r||e.endsWith(`.${r}`))}return e===n||e.endsWith(`.${n}`)}function or(e){return{enableExternalWebContext:e?.enableExternalWebContext??zt.enableExternalWebContext,scrapeMode:e?.scrapeMode==="on_demand"?"on_demand":zt.scrapeMode,allowDomains:Xt(e?.allowDomains),denyDomains:Xt(e?.denyDomains)}}function sr(e,t){let n=rr(e);return n?t.denyDomains.some(r=>Vt(n,r))?{allowed:!1,reason:"deny_rule"}:t.allowDomains.length?t.allowDomains.some(r=>Vt(n,r))?{allowed:!0}:{allowed:!1,reason:"not_in_allowlist"}:{allowed:!0}:{allowed:!1,reason:"invalid_url"}}function ar(e){if(!Array.isArray(e))return[];let t=new Map;for(let n of e){let r=Number(n?.tabId);if(!Number.isFinite(r))continue;let o=n?.accessMode==="external_scraped"?"external_scraped":"external_placeholder",s=String(n?.host||"").trim()||void 0,a=String(n?.title||"").trim()||void 0,c=String(n?.reason||"").trim()||void 0;t.set(r,{tabId:r,accessMode:o,host:s,title:a,reason:c})}return Array.from(t.values())}function ir(e,t){if(e==="act")return"act";if(e==="read_context")return"read_context";if(e==="open_only")return"open_only";let n=String(t||"").toLowerCase();if(!n.trim())return"read_context";let r=/\b(fill|submit|book|buy|purchase|apply|sign up|signup|log in|login|register|delete|update|create|post|send|checkout|pay)\b/i,o=/\b(search|search for|look up|lookup|browse|filter|sort|select|choose|pick|add to cart|compare prices|find reviews|pull reviews)\b/i,s=/\b(open|navigate|go to|visit|take me to|bring me to)\b/i,a=/\b(read|summarize|extract|inspect|analyze|check|find|lookup|list|show|compare|review)\b/i;return r.test(n)&&!/\b(do not|don't)\b/i.test(n)||o.test(n)?"act":(s.test(n)&&!a.test(n)||a.test(n),"read_context")}function cr(e){let t=Yt,n=String(e||t).trim().replace(/\/+$/,"");if(!n)return t;if(n.endsWith("/extensionRouter"))return n;try{let r=new URL(n),o=r.pathname.replace(/\/+$/,"");if(o&&o!=="/"||r.hostname.toLowerCase()==="extensionrouter.rtrvr.ai")return n}catch{}return`${n}/extensionRouter`}function ur(e){let t=Yt,n=String(e||t).trim().replace(/\/+$/,"");return n?n.endsWith("/extensionRouter")?`${n.slice(0,-16)}/v2/rover`:n.endsWith("/v2/rover")?n:`${n}/v2/rover`:`${t}/v2/rover`}function It(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`}function lr(e){let t=e.runtimeContext;if(!t||t.mode!=="rover_embed")return;let n=ar(t.externalTabs).slice(0,8);return{mode:"rover_embed",agentName:Qt(t.agentName)||"Rover",externalNavigationPolicy:t.externalNavigationPolicy||e.externalNavigationPolicy,tabIdContract:t.tabIdContract||"tree_index_mapped_by_tab_order",...n.length?{externalTabs:n}:{}}}function Et(e){let t=Qt(e.agentName)||"Rover",n=e.reason||"external_domain_inaccessible",r=e.title||"External Tab (Inaccessible)",o=e.url||"",s=n?` Reason: ${n}.`:"";return{url:o,title:r,contentType:"text/html",content:`${t} cannot access this external page directly. To read this page's content when you know its exact URL, use 'rover_external_read_context' with the URL (supports multiple URLs via 'urls' param). For tasks requiring search, navigation, or interaction (e.g. searching Google, browsing results, filtering), use 'rover_external_act_context' with the FULL task description in 'message'.${s}`,metadata:{inaccessible:!0,external:!0,accessMode:"external_placeholder",reason:n,logicalTabId:e.tabId}}}function dr(){let e=new Date,t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0"),o=e.getHours(),s=String(e.getMinutes()).padStart(2,"0"),a=o>=12?"PM":"AM";o=o%12,o=o||12;let c=String(o).padStart(2,"0");return`${t}/${n}/${r} ${c}:${s} ${a}`}function Jt(e,t,n){let r=dr(),o=typeof e.apiMode=="boolean"?e.apiMode:!!String(e.sessionToken||e.authToken||"").trim(),s={model:e.llmIntegration?.model||e.model||Ht},a=e.googleAiStudioApiKeys||e.llmIntegration?.apiKeys,c=e.googleAiStudioApiKey||e.llmIntegration?.apiKey;a&&a.length>0?(s.enableGoogleAiStudioApiKey=!0,s.apiKeys=a):c?(s.enableGoogleAiStudioApiKey=!0,s.apiKey=c):e.llmIntegration?.enableGoogleAiStudioApiKey&&(s.enableGoogleAiStudioApiKey=!0);let i=cr(e.apiBase),u=ur(e.apiBase),l=lr(e),d=or(e.tools?.web),f=new Map,m=new Map,T,k=0,b=0,A=[1e3,3e3],O=A.length,S=250,y=45e3,v=async(L,P)=>{let _=String(e.sessionToken||e.authToken||"").trim();if(!_||!_.startsWith("rvrsess_"))for(let p=0;p<3&&(await new Promise(g=>setTimeout(g,800)),_=String(e.sessionToken||e.authToken||"").trim(),!(_&&_.startsWith("rvrsess_")));p++);if(!_||!_.startsWith("rvrsess_"))throw we({code:"MISSING_AUTH_TOKEN",message:"Rover session token is required to call backend action routes.",requires_api_key:!1,next_action:"Initialize Rover session via /v2/rover/session/open and pass sessionToken to rover.boot(...).",retryable:!1});let h;for(let p=0;p<=O;p++){p>0&&await new Promise(I=>setTimeout(I,A[p-1]));let g=await fetch(i,{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify({action:L,data:P&&typeof P=="object"?{...P,sessionToken:_,sessionId:String(e.sessionId||"").trim()||void 0,runId:String(e.activeRunId||"").trim()||void 0,requestNonce:It(),...!P.runtimeContext&&l?{runtimeContext:l}:{}}:{payload:P,sessionToken:_,sessionId:String(e.sessionId||"").trim()||void 0,runId:String(e.activeRunId||"").trim()||void 0,requestNonce:It()}}),signal:e.signal});if(!g.ok){if(g.status===429){let E=Number(g.headers.get("Retry-After"))||0,D=we({code:"RATE_LIMITED",message:"Rate limited by backend",retryable:!0,details:{status:429,retryAfter:E}});if(p<O){h=D;continue}throw D}let I;try{I=await g.json()}catch{let E=await g.text().catch(()=>"");E&&(I={error:E})}let N=Y(I,`HTTP ${g.status}`);throw we({...N,details:{status:g.status,endpoint:i,action:L,response:I}})}let w=await g.json();if(w?.success===!1){let I=Y(w,w?.error||"extensionRouter returned success=false");throw we({...I,details:{endpoint:i,action:L,response:w}})}return w}throw h||new Error("callExtensionRouter: unexpected retry exhaustion")},M=async(L,P)=>{let _=String(L||"").trim();if(!_)throw new Error("external page data requires url");let h=Number(P?.tabId)||0,p=P?.source||"direct_url",g=P?.intent==="act"?"act":P?.intent==="open_only"?"open_only":"read_context",w=`${h}:${g}:${p}:${_}`,I=Date.now(),N=f.get(w);if(N&&I-N.ts<=y)return N.data;f.delete(w);let E=m.get(w);if(E&&I-E.ts<=y)throw new Error(E.message||"external page data fetch failed");if(m.delete(w),T)throw new Error(T);let D=String(e.sessionToken||"").trim();if(!D.startsWith("rvrsess_"))throw we({code:"MISSING_AUTH_TOKEN",message:"External context requires a Rover session token.",next_action:"Initialize Rover v2 session/open before requesting external context.",retryable:!1});try{let C=await fetch(`${u}/context/external`,{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify({requestNonce:It(),sessionToken:D,sessionId:String(e.sessionId||"").trim()||void 0,runId:String(P?.runId||e.activeRunId||"").trim()||void 0,expectedEpoch:Number.isFinite(Number(e.sessionEpoch))?Number(e.sessionEpoch):void 0,expectedSeq:Number.isFinite(Number(e.sessionSeq))?Number(e.sessionSeq):void 0,logicalTabId:Number(P?.tabId)>0?String(Math.trunc(Number(P?.tabId))):void 0,intent:g,url:_,source:p,message:P?.message,timeoutMs:g==="act"?72e4:3e5}),signal:e.signal}),$=await C.json().catch(()=>{});if(!C.ok||$?.success===!1){let j=Y($,$?.error||`external context request failed (${C.status})`);throw we({...j,details:{endpoint:`${u}/context/external`,status:C.status,response:$}})}let G=$?.data?.pageData||$?.data;return f.set(w,{data:G,ts:I}),G}catch(C){let $=Y(C,"external page data fetch failed"),G=$?.message||"external page data fetch failed";throw m.set(w,{message:G,ts:I}),($.code==="PERMISSION_DENIED"||$.code==="MISSING_API_KEY"||$.code==="INVALID_API_KEY")&&(T=`${$.code}: ${G}`),C}},H=async()=>{let L=Date.now();if(k>0&&L-b<=S)return k;try{let P=await t("getTabContext"),_=Number(P?.activeLogicalTabId||P?.logicalTabId||P?.id);if(Number.isFinite(_)&&_>0)return k=_,b=L,_}catch{}},F=async(L,P)=>{let _=Number(L),h=P&&typeof P=="object"?P:void 0,p=h?.__roverAllowExternalFetch===!0,g=h?.__roverExternalIntent==="act"||h?.__roverExternalIntent==="open_only"||h?.__roverExternalIntent==="read_context"||h?.__roverExternalIntent==="auto"?h.__roverExternalIntent:"auto",w=typeof h?.__roverExternalMessage=="string"?String(h.__roverExternalMessage):void 0,I=ir(g,w),N=h&&typeof h=="object"?Object.fromEntries(Object.entries(h).filter(([W])=>W!=="__roverAllowExternalFetch"&&W!=="__roverExternalIntent"&&W!=="__roverExternalMessage")):void 0,E=!!N&&Object.keys(N).length>0,D=h?await t("getPageData",E?{pageConfig:N,tabId:_}:{tabId:_}):await t("getPageData",{tabId:_}),C=D?.metadata||{};if(!(!!C?.external||C?.accessMode==="external_placeholder"||C?.accessMode==="external_scraped"))return D;let G=typeof D?.url=="string"?D.url.trim():"";if(!d.enableExternalWebContext||d.scrapeMode==="off"||!G)return D;if(T)return Et({tabId:_,url:G,title:D?.title,agentName:l?.agentName,reason:`cloud_fetch_disabled:${T}`});let j=sr(G,{allowDomains:d.allowDomains,denyDomains:d.denyDomains});if(!j.allowed)return Et({tabId:_,url:G,title:D?.title,agentName:l?.agentName,reason:`policy_blocked:${j.reason||"blocked"}`});let J=await H();if(!(p||(J?J===_:!1)))return D;try{let W=await M(G,{tabId:_,source:G.includes("google.com/search")?"google_search":"direct_url",intent:I,message:w});return I==="open_only"?D:W&&typeof W=="object"?{...W,metadata:{...W.metadata||{},external:!0,accessMode:"external_scraped",logicalTabId:_}}:D}catch(W){let Xe=Y(W,"external page data fetch failed");return Et({tabId:_,url:G,title:D?.title,agentName:l?.agentName,reason:`cloud_fetch_failed:${Xe?.code||"unknown"}`})}},R=e.userProfile||(e.userContext?{userContext:e.userContext}:void 0),x=o?{enableAdditionalTools:["generate_sheets","generate_docs","generate_slides","generate_websites"],mode:"none"}:void 0;return{userTimestamp:r,siteId:e.siteId,llmIntegration:s,userProfile:R,getPageData:F,getExternalPageData:M,callExtensionRouter:v,apiMode:o,apiToolsConfig:nr(e.apiToolsConfig??x),tabularStore:n??new de(`rover-${r}`),signal:e.signal}}var fr=async(e,t)=>{let n=await t();if(!e||!n)throw new Error("Missing sheetId or authToken. Cannot fetch metadata.");let r=await fetch(`https://sheets.googleapis.com/v4/spreadsheets/${e}`,{headers:{Authorization:`Bearer ${n}`}});if(!r.ok){let s=new Error(`HTTP error ${r.status}: ${r.statusText}`);throw s.status=r.status,s}return await r.json()};var en=async(e,t)=>{let n=await fr(e,t);if(!n||!n.sheets)throw new Error("Sheet Data missing or malformed after successful fetch");let r=n.sheets.map(o=>({id:o.properties.sheetId,title:o.properties.title}));return{sheetTitle:n.properties?.title,sheetTabs:r}};async function tn(e,t,n){return pr(e,t,n)}var pr=async(e,t,n)=>{let r=await n();if(!(!e||!t||!r))try{let o=encodeURIComponent(`'${t}'`),s=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${o}?valueRenderOption=FORMATTED_VALUE`,a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${o}?valueRenderOption=FORMULA`,c={Authorization:`Bearer ${r}`},[i,u]=await Promise.all([fetch(s,{headers:c}),fetch(a,{headers:c})]);if(!i.ok)throw new Error("Values fetch failed: "+i.statusText);if(!u.ok)throw new Error("Formulas fetch failed: "+u.statusText);let l=await i.json(),d=await u.json(),f=l?.values??[],m=d?.values??[];return mr(f,m)}catch(o){console.error("Error fetching sheet tab data:",o);return}},Zt=e=>e.reduce((t,n)=>Math.max(t,n?.length??0),0),gr=e=>e==null?"null":Array.isArray(e)?"array":typeof e,mr=(e,t)=>{let n=Math.max(e.length,t.length),r=Math.max(Zt(e),Zt(t)),o=new Array(n);for(let s=0;s<n;s++){let a=new Array(r);for(let c=0;c<r;c++){let i=e[s]?.[c]??null,u=t[s]?.[c],l=typeof u=="string"&&u.startsWith("=");a[c]=l?{v:i,f:u,t:gr(i)}:i}o[s]=a}return o};var Le=async(e,t,n,r={},o="POST")=>{let s=await t();if(!s)throw new Error("Google authentication token is not available.");let a,c;if(n==="batchUpdate")a=`https://sheets.googleapis.com/v4/spreadsheets/${e}:batchUpdate`,c=JSON.stringify(r),o="POST";else if(n==="values.update"){let{range:l,valueInputOption:d,resource:f}=r;a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${encodeURIComponent(l)}?valueInputOption=${encodeURIComponent(d)}`,c=JSON.stringify(f),o="PUT"}else if(n==="values.append"){let{range:l,valueInputOption:d,insertDataOption:f,resource:m}=r,T=encodeURIComponent(d??"USER_ENTERED"),k=encodeURIComponent(f??"INSERT_ROWS");a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${encodeURIComponent(l)}:append?valueInputOption=${T}&insertDataOption=${k}`,c=JSON.stringify(m),o="POST"}else if(n==="values.get"){let{range:l,...d}=r,f=new URLSearchParams(d).toString();a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${encodeURIComponent(l)}${f?`?${f}`:""}`,c=void 0,o="GET"}else if(n==="addSheet")a=`https://sheets.googleapis.com/v4/spreadsheets/${e}:batchUpdate`,c=JSON.stringify({requests:[{addSheet:r}]}),o="POST";else if(n==="get"){let l=new URLSearchParams(r).toString();a=`https://sheets.googleapis.com/v4/spreadsheets/${e}?${l}`,c=void 0,o="GET"}else{let l=new URLSearchParams(r).toString();a=`https://sheets.googleapis.com/v4/spreadsheets/${e}?${l}`,c=void 0,o="GET"}let i=await fetch(a,{method:o,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},...c&&{body:c}});if(!i.ok){let l=await i.json().catch(()=>({error:{message:"Unknown API error"}}));throw console.error("Google Sheets API Error:",l),new Error(l.error?.message||`API request failed with status ${i.status}`)}let u=await i.json();return n==="addSheet"?u.replies[0].addSheet:u};var nn;(function(e){e.Extract="Extract",e.Crawl="Crawl",e.Infer="Infer"})(nn||(nn={}));var Fe;(function(e){e.COLUMNS="columns",e.NEWTAB="new_tab",e.CONTEXT="context_only"})(Fe||(Fe={}));var rn;(function(e){e.ROWBYROW="row_by_row",e.ALLATONCE="all_at_once"})(rn||(rn={}));var on;(function(e){e.AUTO="auto",e.REUSE_SINGLE_TAB="reuse_single_tab",e.REUSE_BY_URL="reuse_by_url",e.NEVER="never"})(on||(on={}));var sn;(function(e){e.Code="Code",e.Cron="Cron",e.Graph="Graph",e.PDFFill="PDFFill",e.ToolGenerate="ToolGenerate",e.WebPageGenerate="WebPageGenerate",e.GoogleDocGenerate="GoogleDocGenerate",e.GoogleSlidesGenerate="GoogleSlidesGenerate",e.ProcessText="ProcessText",e.CreateSheetFromData="CreateSheetFromData",e.QueryRtrvrAIDocs="QueryRtrvrAIDocs",e.EnhancePrompt="EnhancePrompt"})(sn||(sn={}));var an;(function(e){e.FLASH_LITE="Gemini Flash Lite",e.FLASH="Gemini Flash",e.PRO="Gemini Pro"})(an||(an={}));var Q;(function(e){e.enhance="enhance",e.plan="plan",e.actOnTabs="actOnTabs",e.extract="extract",e.infer="infer",e.processTabWorkflows="processTabWorkflows",e.processText="processText",e.createSheetFromData="createSheetFromData",e.queryRtrvrDocs="queryRtrvrDocs",e.googleDocGenerator="googleDocGenerator",e.googleSlidesGenerator="googleSlidesGenerator",e.webpageGenerator="webpageGenerator",e.pdfFiller="pdfFiller",e.customToolGenerator="customToolGenerator",e.getPageData="getPageData",e.roverExternalPageData="roverExternalPageData"})(Q||(Q={}));var Ge={plannerHistory:16,prevSteps:8,uiMessages:40,timelineEvents:60,localPersistBytes:131072,snapshotBytes:262144};var B;(function(e){e.click_element="click_element",e.type_into_element="type_into_element",e.type_and_enter="type_and_enter",e.select_dropdown_value="select_dropdown_value",e.clear_element="clear_element",e.focus_element="focus_element",e.check_field_validity="check_field_validity",e.select_text="select_text",e.hover_element="hover_element",e.right_click_element="right_click_element",e.double_click_element="double_click_element",e.press_key="press_key",e.mouse_wheel="mouse_wheel",e.dispatch_pointer_path="dispatch_pointer_path",e.drag_element="drag_element",e.drag_and_drop="drag_and_drop",e.adjust_slider="adjust_slider",e.scroll_page="scroll_page",e.scroll_to_element="scroll_to_element",e.swipe_element="swipe_element",e.long_press_element="long_press_element",e.pinch_zoom="pinch_zoom",e.go_back="go_back",e.go_forward="go_forward",e.goto_url="goto_url",e.refresh_page="refresh_page",e.open_new_tab="open_new_tab",e.switch_tab="switch_tab",e.close_tab="close_tab",e.describe_images="describe_images",e.google_search="google_search",e.network_run_recipe="network_run_recipe",e.rover_external_read_context="rover_external_read_context",e.rover_external_act_context="rover_external_act_context",e.copy_text="copy_text",e.paste_text="paste_text",e.wait_action="wait_action",e.wait_for_element="wait_for_element",e.answer_task="answer_task",e.upload_file="upload_file",e.solve_captcha="solve_captcha"})(B||(B={}));var Ze=new Set(Object.values(B));var hr=new Set([B.goto_url,B.google_search,B.go_back,B.go_forward,B.refresh_page,B.open_new_tab,B.switch_tab,B.close_tab]),_r=new Set([B.scroll_page,B.scroll_to_element,B.mouse_wheel,B.swipe_element,B.pinch_zoom,B.dispatch_pointer_path,B.hover_element,B.focus_element]),cn=600,Tr=new Set(["same_tab_scheduled","same_host_navigated","subdomain_navigated","new_tab_opened","blocked","switch_tab"]);function et(e){if(e?.())throw new DOMException("Run cancelled","AbortError")}async function un({calls:e,bridgeRpc:t,isCancelled:n}){let r=[],o=!1,s=!1,a,c,i;for(let l of e){et(n);let d=l.name,f=l.args||{};if(s){let b={name:d||"unknown",args:f,response:{status:"Failure",error:`Tool '${d}' skipped because navigation tool '${a}' already ran. Re-plan using new page state.`,output:void 0,allowFallback:!0}};r.push(b);continue}let m;try{et(n),m=await t("executeTool",{call:l})}catch(b){et(n),m={success:!1,error:b?.message||String(b),allowFallback:!0}}let T={status:m?.success?"Success":"Failure",error:m?.error,output:m?.output,allowFallback:m?.allowFallback},k={name:d||"unknown",args:f,response:T};if(r.push(k),m?.success){let b=m?.output&&typeof m.output=="object"?m.output:void 0,A=String(b?.navigationOutcome||"").trim().toLowerCase(),O=Tr.has(A)?A:void 0,S=b?.navigationPending===!0,y=b?.openedInNewTab===!0,v=!!O||S||y;if(hr.has(d)||v){s=!0,a=d,o=!1,O?c=O:y?c="new_tab_opened":d===B.switch_tab?c="switch_tab":d===B.open_new_tab?c="new_tab_opened":c="same_tab_scheduled";let M=Number(b?.logicalTabId??b?.logical_tab_id??b?.tabId??b?.tab_id??f?.logical_tab_id??f?.tab_id);Number.isFinite(M)&&M>0&&(i=M)}else _r.has(d)&&(o=!0)}cn>0&&(await new Promise(b=>setTimeout(b,cn)),et(n))}return{results:r,disableAutoScroll:o&&!s,navigationOccurred:s,navigationTool:a,navigationOutcome:c,logicalTabId:i}}var br={open_url_new_tab:"open_new_tab"};async function tt(e){if(e)for(;e.current.state==="paused";)await new Promise(t=>setTimeout(t,100))}function nt(e){return e.isCancelled?{state:"cancel_requested",reason:e.reason||"worker_cancelled"}:{state:"continue"}}async function rt({request:e,response:t,tabId:n,prevSteps:r,thought:o,bridgeRpc:s,isCancelled:a,userFunctionDeclarations:c,onStatusUpdate:i,onPrevStepsUpdate:u}){let l=()=>{if(a?.())throw new DOMException("Run cancelled","AbortError")};l();let{functionCalls:d,modelParts:f,data:m,accTreeId:T}=t||{},k=!1;if(m&&Array.isArray(m)&&m.length>0)return r.push({accTreeId:T,thought:o,modelParts:f,data:JSON.stringify(m)}),he(r),u?.(r),i?.("Data extracted successfully",o,"verify"),{needsRetry:!1,data:m};if(Array.isArray(d)&&d.length>0){let b=d.find(S=>String(S?.name||"").trim().toLowerCase()==="ask_user");if(b){let S=d.filter(v=>v&&v!==b&&typeof v.name=="string"&&v.name.trim()).map(v=>({name:String(v.name||"unknown"),args:v.args||{},response:{status:"Failure",error:"Skipped because ask_user was called. Wait for user answers before executing other tools.",allowFallback:!0,output:{status:"deferred_after_ask_user"}}})),y=yr(b?.args?.questions_to_ask);return y.length?(r.push({accTreeId:T,thought:o,modelParts:f,functions:[{name:"ask_user",args:{questions_to_ask:y.map(v=>({key:v.key,query:v.query,...v.required===!1?{required:!1}:{}}))},response:{status:"Success",output:{status:"waiting_input",needsUserInput:!0,questions:y}}},...S]}),he(r),u?.(r),i?.("Need user clarification to continue",o,"verify"),{needsRetry:!1,needsUserInput:!0,questions:y}):(r.push({accTreeId:T,thought:o,modelParts:f,fail:"ask_user called with invalid or empty 'questions_to_ask'",functions:[{name:"ask_user",args:b?.args||{},response:{status:"Failure",error:"Missing/invalid 'questions_to_ask'",allowFallback:!1}},...S]}),he(r),u?.(r),{needsRetry:!0})}let A=[],O=[];for(let S of d){let y=String(S?.name||""),v=br[y];if(v){A.push({...S,name:v});continue}S?.name&&Ze.has(S.name)?A.push(S):O.push(S)}if(O.length>0){if(l(),c?.length){for(let S of O)if(!c.find(v=>v.name===S.name))return r.push({accTreeId:T,thought:o,modelParts:f,fail:`Invalid tool name "${S.name}"`,functions:O.map(v=>({name:v.name||"unknown",args:v.args||{},response:{status:"Failure",error:"Invalid tool"}}))}),he(r),u?.(r),{needsRetry:!0}}return i?.(`Requesting external functions: ${O.map(S=>S.name).join(", ")}`,o,"execute"),he(r),u?.(r),{needsRetry:!1,functionCalls:O}}if(A.length>0){l(),i?.(`Executing browser actions: ${A.map(x=>x.name).join(", ")}`,o,"execute"),r.push({accTreeId:T,thought:o,modelParts:f,functions:A.map(x=>({name:x.name||"unknown",args:x.args||{},response:{status:"Pending execution"}}))}),he(r),u?.(r);let S=r.length-1,{results:y,disableAutoScroll:v,navigationOccurred:M,navigationTool:H,navigationOutcome:F,logicalTabId:R}=await un({calls:A,bridgeRpc:s,isCancelled:a});if(k=v,l(),S>=0&&S<r.length){r[S].functions=y;let x=y.filter(L=>L.response.status==="Failure").length;x>0&&(r[S].fail=`${x} tool(s) failed.`)}if(F==="blocked"){let x=y.find(_=>_.response?.output&&typeof _.response.output=="object"&&_.response.output.navigationOutcome==="blocked")?.response?.output,L=x&&typeof x=="object"?String(x.blockedDomain||""):"",P=x&&typeof x=="object"?String(x.agentInstruction||""):"";r.push({thought:`[System] Navigation was blocked${L?` to ${L}`:""}. ${P||"Acknowledge to user and proceed with next step."}`,functions:[{name:"_system_observation",args:{type:"navigation_blocked",blockedDomain:L},response:{status:"Success",output:{observation:"navigation_blocked",blockedDomain:L,instruction:P}}}]})}return he(r),u?.(r),{needsRetry:!1,disableAutoScroll:k,navigationOccurred:M,navigationTool:H,navigationOutcome:F,logicalTabId:R}}}return r.push({accTreeId:T,thought:o,modelParts:f,fail:"Empty or unusable response"}),he(r),u?.(r),{needsRetry:!0}}function yr(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e){if(!r||typeof r!="object")continue;let o=String(r.key||"").trim(),s=Sr(r);if(!o||!s||n.has(o))continue;n.add(o);let a=typeof r.required=="boolean",c=typeof r.optional=="boolean",i=a?!!r.required:c?!r.optional:!0;t.push({key:o,query:s,...typeof r.question=="string"&&r.question.trim()?{question:String(r.question).trim()}:{},...typeof r.id=="string"&&r.id.trim()?{id:String(r.id).trim()}:{},...Array.isArray(r.choices)?{choices:r.choices}:{},required:i})}return t.slice(0,6)}function Sr(e){if(!e||typeof e!="object")return"";let t=String(e.query||e.question||"").trim();return t||""}function he(e){if(e.length<=yt)return;let t=yt-1,n=e[0],r=e.slice(-t);e.length=0,e.push(n,...r)}function ot(e,t=3){if(t<1||e.length===0)return;let n=-1;for(let s=0;s<e.length;s++)if(e[s].accTreeId!==void 0){n=s;break}if(n===-1)return;let r=Math.max(0,t-1),o=0;for(let s=e.length-1;s>=0;s--)if(e[s].accTreeId!==void 0){if(s===n)continue;o<r?o++:delete e[s].accTreeId}}function ln(e,t){let n=[];for(let r of t){let o=r.name||"unknown",s=r.callId??o,a=e[s]??e[o];n.push({functions:[{name:o,args:r.args||{},response:{status:a?.success?"Success":"Failure",error:a?.error?.message||a?.error,output:a?.result}}]})}return n}function _e(e){let t=new Set,n=[];for(let r of e){let o=Number(r);!Number.isFinite(o)||o<=0||t.has(o)||(t.add(o),n.push(o))}return n}function dn(e,t){return e==="external_scraped"||e==="external_placeholder"||e==="live_dom"?e:t?"external_placeholder":"live_dom"}function Ir(e){return e.map(t=>({id:Number(t?.id),url:typeof t?.url=="string"?t.url:void 0,title:typeof t?.title=="string"?t.title:void 0,external:!!t?.external,accessMode:dn(t?.accessMode,!!t?.external),inaccessibleReason:typeof t?.inaccessibleReason=="string"?t.inaccessibleReason:void 0})).filter(t=>Number.isFinite(t.id)&&t.id>0)}function Er(e){return Array.isArray(e)?e.map(t=>{let n=Number(t?.logicalTabId||t?.id);if(!Number.isFinite(n)||n<=0)return;let r=!!t?.external;return{id:n,runtimeId:typeof t?.runtimeId=="string"?t.runtimeId:void 0,url:typeof t?.url=="string"?t.url:void 0,title:typeof t?.title=="string"?t.title:void 0,external:r,accessMode:dn(t?.accessMode,r),inaccessibleReason:typeof t?.inaccessibleReason=="string"?t.inaccessibleReason:void 0,updatedAt:Number(t?.updatedAt)||0}}).filter(t=>!!t):[]}function wt(e,t,n){let r=_e(e);if(!r.length)return[];let s=r.includes(t)?t:r[0];return[s,...r.filter(c=>c!==s)].slice(0,n)}function wr(e,t){if(!t.length)return _e(e);let n=new Set(t);return _e(e).filter(r=>n.has(r))}async function ue(e,t,n){let r=Math.max(1,Number(n?.maxContextTabs)||8),o=Math.max(5e3,Number(n?.detachedExternalTabMaxAgeMs)||9e4),s=Math.max(1e4,Number(n?.staleRuntimeTabMaxAgeMs)||45e3),a=_e(n?.scopedTabIds||[]),c=a.length>0,i=[...a],u=new Set(i),l=Ir(t),d=_e((a.length>0?l.filter(R=>a.includes(R.id)):l).map(R=>R.id)),f=[...d],m=[],T=[],k=R=>c?u.has(R):!0;if(e)try{let R=await e("listSessionTabs");m=Er(Array.isArray(R)?R:[]),T=_e(m.map(x=>x.id)),T.length>0?f=c?wr(T,i):T:c&&(f=[...i])}catch{}c&&(f=_e(f).filter(R=>k(R)),!f.length&&i.length&&(f=[...i]));let b=Number(n?.seedTabId)>0?Number(n?.seedTabId):f[0]||d[0]||1;if(e)try{let R=await e("getTabContext"),x=Number(R?.activeLogicalTabId||R?.logicalTabId||R?.id);Number.isFinite(x)&&x>0&&k(x)&&(b=x)}catch{}c&&!k(b)&&i.length>0&&(b=i[0]);let A=Date.now(),O=new Map;for(let R of m)O.set(R.id,R);let S=m.filter(R=>!!R.runtimeId&&A-(R.updatedAt||0)<=s).map(R=>R.id);if(S.length>0&&!S.includes(b)){let R=[...S].sort((x,L)=>Number(O.get(L)?.updatedAt||0)-Number(O.get(x)?.updatedAt||0))[0];Number.isFinite(R)&&R>0&&k(R)&&(b=R)}f.length?f.includes(b)||(c?f=i.length>0?[...i]:f:m.length>0?b=f[0]:f=[b,...f]):f=c?i.length>0?[...i]:[b]:[b];let y=c?[...i]:m.length>0?_e(m.map(R=>R.id)):[...f],v=y.filter(R=>{if(R===b)return!0;let x=O.get(R);return x?x.runtimeId?A-(x.updatedAt||0)<=s:x.external?A-(x.updatedAt||0)<=o:A-(x.updatedAt||0)<=s:c}),M=c?wt(i,b,r):[...new Set(v.length?v:y.length?y:f)];c||(M.includes(b)?M=[b,...M.filter(R=>R!==b)]:M=[b,...M],M=M.slice(0,r)),M.length||(M=c?i.length>0?wt(i,b||i[0],r):[b||1]:[b||1]);let H={};for(let R of l)H[R.id]=R;for(let R of m)H[R.id]={...H[R.id]||{},...R};for(let R of i)H[R]||(H[R]={id:R,accessMode:"live_dom",inaccessibleReason:"detached_runtime_placeholder"});for(let R of M)H[R]||(H[R]={id:R,accessMode:"live_dom",inaccessibleReason:"detached_runtime_placeholder"});let F={hasExplicitScope:c,scopedTabIdsInput:a,listedTabIds:T,keptScopedTabIds:i,resolvedTabOrder:M};if(c){i.length&&!u.has(b)&&(b=i[0]),M=wt(i,b,r);let R={};for(let x of i)R[x]=H[x]||{id:x};return n?.onDiagnostics?.({...F,resolvedTabOrder:M}),{tabOrder:M,activeTabId:b,tabMetaById:R}}return n?.onDiagnostics?.(F),{tabOrder:M,activeTabId:b,tabMetaById:H}}var fn=3;function Rt(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let o=Number(r);!Number.isFinite(o)||o<=0||t.has(o)||(t.add(o),n.push(o))}return n}async function pn(e){let{tabOrder:t,scopedTabIds:n,seedTabId:r,onScopedTabIdsTouched:o,userInput:s,schema:a,previousSteps:c=[],plannerPrevSteps:i=[],files:u=[],chatLog:l=[],recordingContext:d,trajectoryId:f,onStatusUpdate:m,functionDeclarations:T,bridgeRpc:k,ctx:b,onPrevStepsUpdate:A}=e;if(!t?.length)return{error:"No tabs available for processing",warnings:["No active tab found"]};let O=0,S=[],y=Array.isArray(c)?c:[],v=t.map(x=>({id:x})),M=Rt(n||[]);Number(r)>0&&!M.includes(Number(r))&&M.unshift(Number(r));let H=x=>{let L=Rt(x);if(!L.length)return;let P=Rt([...M,...L]);P.length===M.length&&P.every((_,h)=>_===M[h])||(M=P,o?.(P))},F=0,R;for(;F<fn;){if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};try{if(await tt(void 0),b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};m?.("Analyzing page content...","Calling seek workflow","analyze");let{tabOrder:x,activeTabId:L}=await ue(k,v,{scopedTabIds:M,seedTabId:r});if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};let P=x.length?x:t,_={};try{_[L]=await b.getPageData(L,{...R||{},__roverAllowExternalFetch:!0,__roverExternalIntent:"auto",__roverExternalMessage:s})}catch{F++;continue}let h=P.filter(D=>D!==L),p=await Promise.all(h.map(async D=>{try{let C=await b.getPageData(D);return{tabId:D,pageData:C}}catch{return{tabId:D,pageData:void 0}}}));if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};for(let D of p)D.pageData?_[D.tabId]=D.pageData:S.push(`Could not load page data for tab ${D.tabId}; continuing with remaining tabs.`);if(!_[L]){F++;continue}let g={siteId:b.siteId,customTabWorkflow:"Seek",webPageMap:_,tabOrder:P,activeTabId:L,userInput:s,dataJsonSchema:a,files:u,recordingContext:d,agentLog:{prevSteps:y,chatLog:l},plannerPrevSteps:i,llmIntegration:b.llmIntegration,apiMode:b.apiMode,apiToolsConfig:b.apiToolsConfig,functionDeclarations:T,authToken:void 0,timestamp:b.userTimestamp,trajectoryId:f,userProfile:b.userProfile,stop:nt({isCancelled:!!b.isCancelled?.()})},w=await b.callExtensionRouter(Q.processTabWorkflows,g);if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};if(!w?.success)return{error:w?.error||"Failed to process tab workflows",errorDetails:w?.errorDetails||void 0,creditsUsed:O};let I=w.data;O+=I?.creditsUsed||0;let N=I?.tabResponses?.[L];if(!N){F++;continue}if(N?.warnings?.length&&S.push(...N.warnings),N?.stopState&&N.stopState!=="continue")return{error:String(N.stopReason||N.error||"").trim()||`Execution stopped (${N.stopState})`,prevSteps:y,creditsUsed:O,warnings:S};if(N?.error){F++;continue}let E=await rt({request:g,response:N,tabId:L,prevSteps:y,thought:N.thought,bridgeRpc:k,isCancelled:b.isCancelled,userFunctionDeclarations:T,onStatusUpdate:m,onPrevStepsUpdate:A});if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};if(E.needsRetry){R=E.disableAutoScroll?{disableAutoScroll:!0}:void 0,F++;continue}if(E.navigationOccurred){let D=E.navigationOutcome,C=Number(E.logicalTabId);if(Number.isFinite(C)&&C>0&&H([C]),(D==="new_tab_opened"||D==="switch_tab")&&Number.isFinite(C)&&C>0)try{await k("executeTool",{call:{name:"switch_tab",args:{logical_tab_id:C,tab_id:C}},payload:{reason:"act_loop_navigation_continue"}})}catch{}R=E.disableAutoScroll?{disableAutoScroll:!0}:void 0;continue}if(E.data)return ot(y),A?.(y),{data:E.data,prevSteps:y,creditsUsed:O,warnings:S};if(E.needsUserInput&&Array.isArray(E.questions)&&E.questions.length>0)return ot(y),A?.(y),{prevSteps:y,creditsUsed:O,warnings:S,needsUserInput:!0,questions:E.questions};if(E.functionCalls?.length){let D=E.functionCalls.map(($,G)=>({...$,callId:`${$.name||"fn"}:${G}`})),C={};for(let $ of D){if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};try{let G=await k("executeClientTool",{name:$.name,args:$.args});if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};C[$.callId]={success:!0,result:G}}catch(G){if(b.isCancelled?.())return{error:"Run cancelled",prevSteps:y,creditsUsed:O};C[$.callId]={success:!1,error:{message:G?.message||String(G)}}}}y.push(...ln(C,D)),ot(y),A?.(y)}R=E.disableAutoScroll?{disableAutoScroll:!0}:void 0}catch(x){if(x?.name==="AbortError")return{error:"Run cancelled",prevSteps:y,creditsUsed:O};if(F++,F>=fn)return{error:x?.message||"Agentic seek failed",errorDetails:x?.roverError||void 0,prevSteps:y,creditsUsed:O};await new Promise(L=>setTimeout(L,500*F))}}return{error:"Max retries reached",prevSteps:y,creditsUsed:O,warnings:S}}var Rr=3;function At(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let o=Number(r);!Number.isFinite(o)||o<=0||t.has(o)||(t.add(o),n.push(o))}return n}async function st(e){let{tabOrder:t,scopedTabIds:n,seedTabId:r,onScopedTabIdsTouched:o,userInput:s,schema:a,outputDestination:c,trajectoryId:i,recordingContext:u,plannerPrevSteps:l=[],files:d=[],onStatusUpdate:f,schemaHeaderSheetInfo:m,returnDataOnly:T,previousSteps:k=[],bridgeRpc:b,ctx:A,onPrevStepsUpdate:O}=e;if(!t?.length)return{error:"No tabs available for extraction",warnings:["No active tab found"]};let S=0,y=[],v=t.map(x=>({id:x})),M=At(n||[]);Number(r)>0&&!M.includes(Number(r))&&M.unshift(Number(r));let H=x=>{let L=At(x);if(!L.length)return;let P=At([...M,...L]);P.length===M.length&&P.every((_,h)=>_===M[h])||(M=P,o?.(P))},F=Array.isArray(k)?k:[],R;for(let x=0;x<Rr;x++){if(await tt(void 0),A.isCancelled?.())return{error:"Run cancelled",prevSteps:F,creditsUsed:S,warnings:y};let{activeTabId:L}=await ue(b,v,{scopedTabIds:M,seedTabId:r});if(A.isCancelled?.())return{error:"Run cancelled",prevSteps:F,creditsUsed:S,warnings:y};let P=L,_;try{_=await A.getPageData(P,R)}catch{y.push(`Could not load page data for tab ${P}; retrying.`);continue}let h={siteId:A.siteId,userInput:s,schema:a,outputDestination:c,schemaHeaderSheetInfo:m,webPageMap:{[L]:_},tabOrder:[L],plannerPrevSteps:l,llmIntegration:A.llmIntegration,apiMode:A.apiMode,apiToolsConfig:A.apiToolsConfig,authToken:void 0,timestamp:A.userTimestamp,trajectoryId:i,userProfile:A.userProfile,recordingContext:u,files:d,returnDataOnly:T,stop:nt({isCancelled:!!A.isCancelled?.()})};f?.("Extracting data...","Calling extract sub-agent","execute");let p=await A.callExtensionRouter(Q.extract,h);if(A.isCancelled?.())return{error:"Run cancelled",prevSteps:F,creditsUsed:S,warnings:y};if(!p?.success)return{error:p?.error||"Extract request failed",creditsUsed:S};let g=p.data;if(S+=g?.creditsUsed||0,g?.warnings?.length&&y.push(...g.warnings),g?.data&&Array.isArray(g.data))return{data:g.data,schemaHeaderSheetInfo:g.schemaHeaderSheetInfo,prevSteps:F,creditsUsed:S,warnings:y};let w=g?.tabResponses?.[L];if(w){if(w?.stopState&&w.stopState!=="continue")return{error:String(w.stopReason||w.error||"").trim()||`Execution stopped (${w.stopState})`,prevSteps:F,creditsUsed:S,warnings:y};let I=await rt({request:h,response:w,tabId:L,prevSteps:F,thought:w.thought,bridgeRpc:b,isCancelled:A.isCancelled,onPrevStepsUpdate:O});if(A.isCancelled?.())return{error:"Run cancelled",prevSteps:F,creditsUsed:S,warnings:y};if(I.needsRetry){R=I.disableAutoScroll?{disableAutoScroll:!0}:void 0;continue}if(I.navigationOccurred){let N=Number(I.logicalTabId);Number.isFinite(N)&&N>0&&H([N])}if(R=I.disableAutoScroll?{disableAutoScroll:!0}:void 0,I.data)return{data:I.data,schemaHeaderSheetInfo:g.schemaHeaderSheetInfo,prevSteps:F,creditsUsed:S,warnings:y};if(I.functionCalls?.length)for(let N of I.functionCalls){if(A.isCancelled?.())return{error:"Run cancelled",prevSteps:F,creditsUsed:S,warnings:y};try{if(await b("executeClientTool",{name:N.name,args:N.args}),A.isCancelled?.())return{error:"Run cancelled",prevSteps:F,creditsUsed:S,warnings:y}}catch{if(A.isCancelled?.())return{error:"Run cancelled",prevSteps:F,creditsUsed:S,warnings:y}}}}}return{error:"Extract failed after retries",prevSteps:F,creditsUsed:S,warnings:y}}async function gn(e){let t=await st({tabOrder:e.tabOrder,userInput:e.userInput,schema:e.schema,trajectoryId:e.trajectoryId,recordingContext:e.recordingContext,plannerPrevSteps:e.plannerPrevSteps,previousSteps:e.previousSteps,files:e.files,onStatusUpdate:e.onStatusUpdate,returnDataOnly:e.returnDataOnly,bridgeRpc:e.bridgeRpc,ctx:e.ctx,onPrevStepsUpdate:e.onPrevStepsUpdate}),n=t.warnings?[...t.warnings]:[];return n.push("Crawl workflow is limited in embed context; processed current page only."),{data:t.data,schemaHeaderSheetInfo:t.schemaHeaderSheetInfo,prevSteps:t.prevSteps,error:t.error,warnings:n,creditsUsed:t.creditsUsed}}var Ar=/history\.step\[\s*(\d+)\s*\]\.sheet\[\s*(\d+)\s*\](?:\.tab\[(.*?)\])?/i;function $e(e,t){if(!e||!t?.length)return;let n=e.match(Ar);if(!n)return;let r=parseInt(n[1],10),o=parseInt(n[2],10),s=n[3];if(!r||r<1||r>t.length)return;let a=t[r-1],c=a?.schemaHeaderSheetInfo?.[o]?.sheetInfo||a?.schemaHeaderSheetInfo?.[0]?.sheetInfo;if(!c)return;let i={...c};if(s){let u=s.trim();if(/^['"].*['"]$/.test(u)){let l=u.slice(1,-1),d=c.sheetTabs?.find(f=>String(f.title).toLowerCase()===l.toLowerCase());d&&(i.sheetTab=d.title,i.sheetTabId=d.id)}else{let l=parseInt(u,10);if(!Number.isNaN(l)){let d=c.sheetTabs?.[l]||c.sheetTabs?.[l-1];d&&(i.sheetTab=d.title,i.sheetTabId=d.id)}}}return i}function Re(e,t){let n=e||{},r=n.existing_sheet_from_history||n.existingSheetFromHistory||n.existing_sheet_id||n.existingSheetId,o;typeof r=="string"?(o=$e(r,t),!o&&r.trim()&&(o={sheetId:r.trim(),sheetTab:n.existingTabTitle||n.existing_tab_title||"Data"})):r&&typeof r=="object"&&(o=r);let s=n.new_sheet_title||n.newSheetTitle,a=n.new_tab_title||n.newTabTitle,c=n.existing_tab_title||n.existingTabTitle;return o?.sheetId&&fe(o.sheetId)?{sheetId:o.sheetId,sheetTitle:o.sheetTitle||s,tabTitle:c||o.sheetTab||a||"Data",mergeHeaders:!0}:{sheetId:void 0,sheetTitle:s,tabTitle:a||c,mergeHeaders:!1}}function He(e,t){if(e?.properties&&typeof e.properties=="object")return Object.keys(e.properties);let n=new Set;if(Array.isArray(t))for(let r of t)r&&typeof r=="object"&&!Array.isArray(r)&&Object.keys(r).forEach(o=>n.add(o));return n.size?[...n]:[]}function xr(e,t){return t.map(n=>e.map(r=>n?.[r]??""))}function at(e){let{store:t,target:n,headers:r,objects:o,schema:s}=e,a=t.getOrCreateSheet(n.sheetId,n.sheetTitle),c=n.tabTitle||"Data",i=t.ensureTab(a.id,c,{createIfMissing:!0});i.headerRow.length&&n.mergeHeaders?t.mergeHeaderRow(a.id,i.index,r):t.setHeaderRow(a.id,i.index,r),s&&t.setSchema(a.id,i.index,s,{preserveHeader:!0});let u=t.getTab(a.id,i.index).headerRow,l=xr(u,o);return t.appendRows(a.id,i.index,l,{alignToHeader:!0}),{sheetInfo:t.toSheetInfo(a.id,i.index),headerRow:u}}function mn(e){let{store:t,target:n,headers:r,rows:o,schema:s}=e,a=t.getOrCreateSheet(n.sheetId,n.sheetTitle),c=n.tabTitle||"Data",i=t.ensureTab(a.id,c,{createIfMissing:!0});return i.headerRow.length&&n.mergeHeaders?t.mergeHeaderRow(a.id,i.index,r):t.setHeaderRow(a.id,i.index,r),s&&t.setSchema(a.id,i.index,s,{preserveHeader:!0}),t.appendRows(a.id,i.index,o,{alignToHeader:!0}),{sheetInfo:t.toSheetInfo(a.id,i.index),headerRow:t.getTab(a.id,i.index).headerRow}}function Te(e,t){let n=t.sheetTabId??0,r=e.toAny2D(t.sheetId,n,!0);return{...t,sheetData:r,kind:"memory"}}async function Tn(e){let{workflow:t,userInput:n,trajectoryId:r,plannerPrevSteps:o,agentLog:s,files:a,onStatusUpdate:c,ctx:i,bridgeRpc:u,driveAuthToken:l}=e,d=()=>{if(i.isCancelled?.())throw new DOMException("Run cancelled","AbortError")};try{d();let f=t.sourceSheetFromHistory?$e(t.sourceSheetFromHistory,o):void 0,m=f?.sheetId||t.sheetId,T=f?.sheetTab||t.sheetTabTitle,k=f?.sheetTabId||t.sheetTabId;if(!m)return{error:"sheets_workflow requires sheetId in workflow."};let b=i.apiMode||!l||fe(m),A=async()=>l||"",O=[],S=[];if(b){let p=i.tabularStore,g=k!==void 0?p.getTabByIndex(m,k):T?p.getTabByTitle(m,T):p.getTab(m,0);if(!g)return{error:"Memory sheet tab not found for workflow."};T=g.title,k=g.index,O=p.toAny2D(m,g.index,!0),S=p.listTabs(m).map(w=>({id:w.index,title:w.title}))}else{if(S=(await en(m,A)).sheetTabs,!T&&typeof k=="number"&&(T=S.find(g=>g.id===k)?.title),T||(T=S[0]?.title),!T)return{error:"Could not resolve sheet tab title for workflow."};d(),c?.("Loading sheet rows...",T,"analyze"),O=await tn(m,T,A)||[]}if(!O.length)return{error:"Sheet is empty or inaccessible."};let y=O.map(p=>(p||[]).map(g=>Cr(g))),v=t.isFirstRowHeader?y[0]:null,M=t.isFirstRowHeader?y.slice(1):y.slice(),H=v&&v.length?v:kr(y),F=Dr(t,H),R=Nr(t,H),x=Math.max(0,(t.startRowIndex??1)-1-(t.isFirstRowHeader?1:0)),L=t.endRowIndex?Math.min(M.length,t.endRowIndex-(t.isFirstRowHeader?1:0)):M.length,P=[],_=[],h={};for(let p=x;p<L;p++){d();let g=M[p]||[],w=Or(H,g),I=Pr(H,g,R),N={input_value:g[F]??"",row_number:p+1+(t.isFirstRowHeader?1:0),row_data:w,context:I},E={},D=[];for(let C of t.workflowSteps){d();let $=C.stepName||C.tool,G=xt(C.userInputTemplate||n,N,E);if(C.tabManagement?.urlTemplate){let W=xt(C.tabManagement.urlTemplate,N,E);W&&(d(),await u("executeTool",{call:{name:"goto_url",args:{tab_id:0,url:W}}}))}let j=C.toolArgs?vt(C.toolArgs,N,E):void 0,J=await vr({step:C,userInput:G,trajectoryId:r,plannerPrevSteps:o,agentLog:s,files:a,onStatusUpdate:c,ctx:i,bridgeRpc:u,driveAuthToken:l,toolArgs:j});if(E[$]=J,d(),C.outputMapping===Fe.CONTEXT)continue;if(C.outputMapping===Fe.NEWTAB){h[$]||(h[$]=[]),h[$].push(Mr(J));continue}let Oe=$||C.tool;P.includes(Oe)||P.push(Oe),D.push(qe(J))}_.push(D)}if(b){d();let p=i.tabularStore,g=k!==void 0?p.getTab(m,k):p.getTabByTitle(m,T)||p.getTab(m,0);if(P.length){p.mergeHeaderRow(m,g.index,P);for(let N=0;N<_.length;N++){let E=x+N,D={};P.forEach((C,$)=>{D[C]=_[N]?.[$]??""}),p.upsertColumnsByHeader(m,g.index,E,D)}}for(let[N,E]of Object.entries(h)){let D=hn(N),C=_n(E);p.publishNewTab(m,D,C,E,{})}let w=Te(p,p.toSheetInfo(m,g.index)),I=p.getTab(m,g.index).headerRow;return{output:{sheetId:m,sheetTabTitle:T,rowsProcessed:Math.max(0,L-x),outputColumns:P,newTabs:Object.keys(h)},schemaHeaderSheetInfo:[{headingInfo:{schema:{},headings:I,title:T},sheetInfo:w,headerRow:I}]}}P.length&&(d(),await Ur({sheetId:m,sheetTabTitle:T,header:H,outputHeaders:P,outputRows:_,startRowIndex:t.isFirstRowHeader?2:1,getAuthToken:A}));for(let[p,g]of Object.entries(h)){d();let w=hn(p),I=await Lr(m,w,A),N=_n(g);await Fr({sheetId:m,sheetTabTitle:I,values:[N,...g],getAuthToken:A})}return{output:{sheetId:m,sheetTabTitle:T,rowsProcessed:Math.max(0,L-x),outputColumns:P,newTabs:Object.keys(h)},schemaHeaderSheetInfo:[{headingInfo:{schema:{},headings:[...H,...P],title:T},sheetInfo:{sheetId:m,sheetTab:T,sheetTabId:k,sheetTabs:S},headerRow:[...H,...P]}]}}catch(f){return{error:f?.message||String(f)}}}async function vr({step:e,userInput:t,trajectoryId:n,plannerPrevSteps:r,agentLog:o,files:s,onStatusUpdate:a,ctx:c,bridgeRpc:i,driveAuthToken:u,toolArgs:l}){if(c.isCancelled?.())throw new DOMException("Run cancelled","AbortError");let d=e.tool;if(d===U.PROCESS_TEXT){let f=await be({toolName:d,toolArgs:{textInputs:e.textInputs||[],taskInstruction:e.taskInstruction||t,schema:e.schema},userInput:t,tabs:[{id:1}],trajectoryId:n,plannerPrevSteps:r,agentLog:o,files:s,onStatusUpdate:a,ctx:c,bridgeRpc:i,driveAuthToken:u});return o&&Array.isArray(f.prevSteps)&&f.prevSteps.length>0&&(o.prevSteps=f.prevSteps),f.output??f}if(d===U.ACT||d===U.EXTRACT||d===U.CRAWL){let f=await be({toolName:d,toolArgs:{user_input:t,schema:e.schema,followLinks:e.followLinks,maxPages:e.maxPages},userInput:t,tabs:[{id:1}],trajectoryId:n,plannerPrevSteps:r,agentLog:o,files:s,onStatusUpdate:a,ctx:c,bridgeRpc:i,driveAuthToken:u});return o&&Array.isArray(f.prevSteps)&&f.prevSteps.length>0&&(o.prevSteps=f.prevSteps),f.output??f}if(l||e.toolArgs||typeof d=="string"){if(c.isCancelled?.())throw new DOMException("Run cancelled","AbortError");let f=await i("executeClientTool",{name:d,args:l||e.toolArgs||{}});if(c.isCancelled?.())throw new DOMException("Run cancelled","AbortError");return f}return{error:`Unsupported step tool: ${d}`}}function Cr(e){return e&&typeof e=="object"&&"v"in e?e.v:e??""}function kr(e){let t=e.reduce((r,o)=>Math.max(r,o.length),0),n=[];for(let r=0;r<t;r++)n.push(`Column ${r+1}`);return n}function Or(e,t){let n={};return e.forEach((r,o)=>{n[r]=t[o]}),n}function Pr(e,t,n){let r={};for(let o of n){let s=e[o]||`Column ${o+1}`;r[s]=t[o]}return r}function Dr(e,t){if(e.inputColumnHeader){let n=t.findIndex(r=>r===e.inputColumnHeader);if(n>=0)return n}return typeof e.inputColumnOrdinalPosition=="number"?Math.max(0,e.inputColumnOrdinalPosition-1):0}function Nr(e,t){let n=[];if(e.contextColumnHeaders?.length)for(let r of e.contextColumnHeaders){let o=t.findIndex(s=>s===r);o>=0&&n.push(o)}if(e.contextColumnOrdinals?.length)for(let r of e.contextColumnOrdinals){let o=Math.max(0,r-1);n.includes(o)||n.push(o)}return n}function qe(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Mr(e){return Array.isArray(e)?e.length&&typeof e[0]=="object"&&!Array.isArray(e[0])?e.map(t=>qe(t)):e.map(t=>qe(t)):e&&typeof e=="object"?[qe(e)]:[qe(e)]}async function Ur({sheetId:e,sheetTabTitle:t,header:n,outputHeaders:r,outputRows:o,startRowIndex:s,getAuthToken:a}){let c=n.length+1,i=c+r.length-1,u=`${t}!${je(c)}1:${je(i)}1`;if(await Le(e,a,"values.update",{range:u,valueInputOption:"RAW",resource:{values:[r]}},"PUT"),!o.length)return;let l=s+o.length-1,d=`${t}!${je(c)}${s}:${je(i)}${l}`;await Le(e,a,"values.update",{range:d,valueInputOption:"RAW",resource:{values:o}},"PUT")}async function Lr(e,t,n){return await Le(e,n,"addSheet",{properties:{title:t}},"POST"),t}async function Fr({sheetId:e,sheetTabTitle:t,values:n,getAuthToken:r}){let o=Math.max(1,n.reduce((c,i)=>Math.max(c,i.length),0)),s=n.length,a=`${t}!A1:${je(o)}${s}`;await Le(e,r,"values.update",{range:a,valueInputOption:"RAW",resource:{values:n}},"PUT")}function je(e){let t=e,n="";for(;t>0;){let r=(t-1)%26;n=String.fromCharCode(65+r)+n,t=Math.floor((t-r)/26)}return n}function hn(e){let t=e.replace(/[^a-zA-Z0-9 _-]/g,"").trim();return(t.length>80?t.slice(0,80):t)||`Rover-${Math.random().toString(36).slice(2,6)}`}function _n(e){if(!e.length)return["result"];let t=e.reduce((r,o)=>Math.max(r,o.length),0);if(t<=1)return["result"];let n=[];for(let r=0;r<t;r++)n.push(`value_${r+1}`);return n}function xt(e,t,n){if(!e)return"";let r=/\{\{\s*([^}]+)\s*\}\}/g;return e.replace(r,(o,s)=>{let a=String(s).trim(),[c,...i]=Gr(a),u;switch(c){case"input_value":u=t.input_value;break;case"row_number":u=t.row_number;break;case"row_data":u=t.row_data;break;case"context":u=t.context;break;case"step":u=n;break;default:u=t}let l=$r(u,i.join("."));if(l==null)return"";if(typeof l=="string")return l;try{return JSON.stringify(l)}catch{return String(l)}})}function vt(e,t,n){if(e==null)return e;if(typeof e=="string")return xt(e,t,n);if(Array.isArray(e))return e.map(r=>vt(r,t,n));if(typeof e=="object"){let r={};for(let[o,s]of Object.entries(e))r[o]=vt(s,t,n);return r}return e}function Gr(e){return e.replace(/\["([^"]+)"\]/g,".$1").replace(/\['([^']+)'\]/g,".$1").split(".").filter(Boolean)}function $r(e,t){if(!t)return e;let n=t.split(".").filter(Boolean),r=e;for(let o of n){if(r==null)return;r=r[o]}return r}var Ct=12;function bn(e,t){return{error:t,warnings:[t],output:[{tool:e,status:"unsupported_in_embed",message:t}]}}function ct(e){let t=e.code||"UNKNOWN_ERROR",n=e.message||"Operation failed",r=Array.isArray(e.missing)?e.missing:[],o=!!e.retryable;return{success:!1,error:{code:t,message:n,missing:r,next_action:e.next_action,retryable:o,requires_api_key:!!e.requires_api_key},missing:r,next_action:e.next_action,retryable:o}}function Hr(e){let t=Array.isArray(e?.prevSteps)?e.prevSteps:[],n=i=>String(i||"").replace(/\s+/g," ").trim(),r=Array.isArray(e?.chatLog)?e.chatLog.map(i=>({role:i?.role==="user"?"user":"model",message:typeof i?.message=="string"?n(i.message):""})).filter(i=>!!i.message):[],o=[];for(let i of r){let u=o[o.length-1];u&&u.role===i.role&&u.message===i.message||o.push(i)}let s=o.slice(-Ct),a=new Set,c=[];for(let i=s.length-1;i>=0;i-=1){let u=s[i],l=`${u.role}::${u.message.toLowerCase()}`;a.has(l)||(a.add(l),c.push(u))}return s=c.reverse(),s.length>Ct&&(s=s.slice(-Ct)),{prevSteps:t,chatLog:s}}function ye(e){if(!e?.isCancelled)return!1;try{return!!e.isCancelled()}catch{return!1}}function yn(e){if(ye(e))throw new DOMException("Run cancelled","AbortError")}function it(){return{error:"Run cancelled"}}async function qr(e){let t=e.bridgeRpc;if(!t)return{error:`Bridge RPC unavailable for ${e.toolName}`};let n=String(e.toolArgs?.message||e.toolArgs?.user_input||e.toolArgs?.task_instruction||e.userInput||"").trim();e.onStatusUpdate?.(e.toolName===U.ROVER_EXTERNAL_ACT_CONTEXT?"Fetching external action context...":"Fetching external context...",`Calling ${e.toolName}`,"execute");let r=await t("executeTool",{call:{name:e.toolName,args:{...e.toolArgs,...n?{message:n}:{}}}});if(!(r?.success===!0)){let s=String(r?.output?.error?.message||r?.error||`${e.toolName} failed`);return{error:s,output:r?.output,warnings:s?[s]:void 0}}return{output:r?.output,warnings:Array.isArray(r?.output?.warnings)?r.output.warnings:void 0}}async function pe(e,t,n){yn(e);let r=await e.callExtensionRouter(t,n);return yn(e),r}async function be(e){let{toolName:t,toolArgs:n,userInput:r,tabs:o,scopedTabIds:s,seedTabId:a,getScopedTabRuntimeContext:c,onScopedTabIdsTouched:i,trajectoryId:u,plannerPrevSteps:l,files:d,onStatusUpdate:f,recordingContext:m,toolFunctions:T,bridgeRpc:k,ctx:b,functionDeclarations:A,driveAuthToken:O,agentLog:S,onPrevStepsUpdate:y}=e,v=b;if(!v)return{error:"Agent context unavailable"};if(ye(v))return it();let M=Array.isArray(o)&&o.length?o:[{id:1}],H=c?.()||{},F=H.scopedTabIds??s,R=H.seedTabId??a,x=Array.isArray(F)&&F.length?Array.from(new Set(F.map(p=>Number(p)).filter(p=>Number.isFinite(p)&&p>0))):Array.from(new Set(M.map(p=>Number(p?.id)).filter(p=>Number.isFinite(p)&&p>0))),L=Number(R)>0?Number(R):x[0],P=await ue(k,M,{scopedTabIds:x,seedTabId:L});if(ye(v))return it();let _=P.tabOrder.length?P.tabOrder:M.map(p=>p.id),h=Hr(S);try{switch(t){case U.ACT:{let p=n?.user_input||n?.prompt||n?.task_instruction||r,g=await pn({tabOrder:_,scopedTabIds:x,seedTabId:L,onScopedTabIdsTouched:i,userInput:p,schema:n?.schema,previousSteps:h.prevSteps,plannerPrevSteps:l,files:d,chatLog:h.chatLog,recordingContext:m,trajectoryId:u,onStatusUpdate:f,functionDeclarations:A,bridgeRpc:k,ctx:v,onPrevStepsUpdate:y}),w=g.data??(g.needsUserInput?{status:"waiting_input",needsUserInput:!0,questions:Array.isArray(g.questions)?g.questions:[]}:g.navigationPending?{status:"in_progress",taskStatus:"in_progress",navigationPending:!0,navigationTool:g.navigationTool,navigationOutcome:g.navigationOutcome,logicalTabId:g.logicalTabId}:void 0);return{...g,output:w}}case U.EXTRACT:{let p=n?.user_input||n?.prompt||n?.task_instruction||r,g=n?.output_destination||n?.outputDestination,w=g?Re(g,l):void 0,I=v.apiMode||!O||w?.sheetId&&fe(w.sheetId),N=n?.return_data_only??n?.returnDataOnly??I,E=await st({tabOrder:_,scopedTabIds:x,seedTabId:L,onScopedTabIdsTouched:i,userInput:p,schema:n?.schema,outputDestination:g,schemaHeaderSheetInfo:n?.schema_header_sheet_info||n?.schemaHeaderSheetInfo,plannerPrevSteps:l,files:d,recordingContext:m,previousSteps:h.prevSteps,trajectoryId:u,returnDataOnly:N,onStatusUpdate:f,bridgeRpc:k,ctx:v,onPrevStepsUpdate:y});if(E.data&&Array.isArray(E.data)&&g&&I){let D=He(n?.schema,E.data),C=w||Re(g,l),$=v.tabularStore,{sheetInfo:G,headerRow:j}=at({store:$,target:C,headers:D,objects:E.data,schema:n?.schema}),J=Te($,G);return{...E,output:E.data,schemaHeaderSheetInfo:[{headingInfo:{schema:n?.schema||{},headings:j,title:G.sheetTitle||G.sheetTab},sheetInfo:J,headerRow:j}]}}return{...E,output:E.data}}case U.CRAWL:{let p=n?.user_input||n?.prompt||n?.task_instruction||r,g=n?.output_destination||n?.outputDestination,w=g?Re(g,l):void 0,I=v.apiMode||!O||w?.sheetId&&fe(w.sheetId),N=n?.return_data_only??n?.returnDataOnly??I,E=await gn({tabOrder:_,userInput:p,schema:n?.schema,plannerPrevSteps:l,files:d,recordingContext:m,previousSteps:h.prevSteps,trajectoryId:u,onStatusUpdate:f,returnDataOnly:N,bridgeRpc:k,ctx:v,onPrevStepsUpdate:y});if(E.data&&Array.isArray(E.data)&&g&&I){let D=He(n?.schema,E.data),C=w||Re(g,l),$=v.tabularStore,{sheetInfo:G,headerRow:j}=at({store:$,target:C,headers:D,objects:E.data,schema:n?.schema}),J=Te($,G);return{...E,output:E.data,schemaHeaderSheetInfo:[{headingInfo:{schema:n?.schema||{},headings:j,title:G.sheetTitle||G.sheetTab},sheetInfo:J,headerRow:j}]}}return{...E,output:E.data}}case U.PROCESS_TEXT:{let p=n?.text_inputs||n?.textInputs||[],g=n?.task_instruction||n?.taskInstruction||r;return jr({textInputs:p,taskInstruction:g,schema:n?.schema,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v,driveAuthToken:n?.authToken||n?.driveAuthToken||O})}case U.ROVER_EXTERNAL_READ_CONTEXT:case U.ROVER_EXTERNAL_ACT_CONTEXT:return n?.serverResult?n.serverResult.success?{output:n.serverResult.data}:{error:n.serverResult.error||"Server-side execution failed"}:qr({toolName:t,toolArgs:n||{},userInput:r,bridgeRpc:k,onStatusUpdate:f});case U.CREATE_SHEET_FROM_DATA:{let p=n?.data_inputs||n?.dataInputs||[],g=n?.task_instruction||n?.taskInstruction||r;return Wr({dataInputs:p,taskInstruction:g,schema:n?.schema,outputSheetParameters:n?.output_sheet_parameters||n?.outputSheetParameters,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v,driveAuthToken:n?.authToken||n?.driveAuthToken||O})}case U.INFER_SHEET_DATA:return Br({toolArgs:n,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v,driveAuthToken:n?.authToken||n?.driveAuthToken||O});case U.QUERY_RTRVR_AI_DOCUMENTATION:{let p=n?.user_question||n?.userQuestion||r;return Kr({userQuestion:p,trajectoryId:u,plannerPrevSteps:l,onStatusUpdate:f,agentLog:h,ctx:v})}case U.GOOGLE_DOC_GENERATOR:{let p=n?.user_input||n?.prompt||n?.task_instruction||r;return zr({userInput:p,toolArgs:n,tabOrder:_,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v,driveAuthToken:n?.authToken||n?.driveAuthToken||O})}case U.GOOGLE_SLIDES_GENERATOR:{let p=n?.user_input||n?.prompt||n?.task_instruction||r;return Xr({userInput:p,toolArgs:n,tabOrder:_,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v,driveAuthToken:n?.authToken||n?.driveAuthToken||O})}case U.WEBPAGE_GENERATOR:{let p=n?.user_input||n?.prompt||n?.task_instruction||r;return Vr({userInput:p,toolArgs:n,tabOrder:_,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v})}case U.PDF_FILLER:{let p=n?.user_input||n?.prompt||n?.task_instruction||r;return Yr({userInput:p,toolArgs:n,tabOrder:_,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v,driveAuthToken:n?.authToken||n?.driveAuthToken||O})}case U.CUSTOM_TOOL_GENERATOR:{let p=n?.user_input||n?.prompt||n?.task_instruction||r;return Qr({userInput:p,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:h,ctx:v})}case U.SHEETS_WORKFLOW:return Tn({workflow:n,userInput:r,trajectoryId:u,plannerPrevSteps:l,files:d,onStatusUpdate:f,agentLog:h,ctx:v,bridgeRpc:k,driveAuthToken:O});case U.GRAPHBOT:return bn(U.GRAPHBOT,"graph_bot is not available in rover embed mode. Use webpage_generator or process_text.");case U.EXECUTE_MULTIPLE_TOOLS:{let p=n?.tool_calls||n?.toolCalls||[],g=[];if(Array.isArray(p))for(let w of p){if(ye(v))return{error:"Run cancelled",output:g};let I=w.tool_name||w.name,N=w.tool_args||w.args||{};try{let E;if(I&&Ze.has(I)?E=await k?.("executeTool",{call:{name:I,args:N}}):E=await k?.("executeClientTool",{name:I,args:N}),ye(v))return{error:"Run cancelled",output:g};g.push({name:I,result:E,success:!0})}catch(E){if(ye(v))return{error:"Run cancelled",output:g};g.push({name:I,error:E?.message||String(E),success:!1})}}return{output:g}}case U.CONFIGURE_API_KEY:return bn(U.CONFIGURE_API_KEY,"configure_api_key is not supported in rover embed mode. Provide publicKey (pk_site_*) via rover.boot(...) or an rvrsess_* sessionToken.");default:{if(T&&T[t])try{if(ye(v))return it();let p=await k?.("executeClientTool",{name:t,args:n});return ye(v)?it():{output:p}}catch(p){return{error:p?.message||String(p)}}return{error:`Unsupported tool: ${t}`}}}}catch(p){if(p?.name==="AbortError")throw p;let g=Y(p,`Failed to execute tool: ${t}`);return{output:ct(g),error:g.message,errorDetails:g,warnings:g.message?[g.message]:void 0}}}async function jr({textInputs:e,taskInstruction:t,schema:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){a?.("Processing text...","Calling process_text","execute");let l={siteId:i.siteId,textInputs:e,taskInstruction:t,schema:n,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o},d=await pe(i,Q.processText,l);return d?.success?{output:d.data?.text?[d.data.text]:d.data?.data,error:d.data?.error,errorDetails:d.data?.errorDetails,creditsUsed:d.data?.creditsUsed,warnings:d.data?.warnings}:{error:d?.error||"process_text failed"}}async function Wr({dataInputs:e,taskInstruction:t,schema:n,outputSheetParameters:r,plannerPrevSteps:o,files:s,trajectoryId:a,onStatusUpdate:c,agentLog:i,ctx:u,driveAuthToken:l}){c?.("Creating sheet...","Calling create_sheet_from_data","execute");let d=Re(r,o),f=u.apiMode||!l||d.sheetId&&fe(d.sheetId),m={siteId:u.siteId,dataInputs:e,taskInstruction:t,schema:n,outputSheetParameters:r,agentLog:{prevSteps:i?.prevSteps||[],chatLog:i?.chatLog||[]},plannerPrevSteps:o,llmIntegration:u.llmIntegration,apiMode:u.apiMode,apiToolsConfig:u.apiToolsConfig,authToken:l||"",timestamp:u.userTimestamp,trajectoryId:a,userProfile:u.userProfile,files:s,returnDataOnly:f},T=await pe(u,Q.createSheetFromData,m);if(!T?.success)return{error:T?.error||"create_sheet_from_data failed"};if(f){let k=T.data?.jsonData||T.data?.data||[],b=Array.isArray(k)?k:[k],A=He(n,b),O=d||Re(r,o),S=u.tabularStore,{sheetInfo:y,headerRow:v}=at({store:S,target:O,headers:A,objects:b,schema:n}),M=Te(S,y);return{output:b,error:T.data?.error,errorDetails:T.data?.errorDetails,creditsUsed:T.data?.creditsUsed,warnings:T.data?.warnings,schemaHeaderSheetInfo:[{headingInfo:{schema:n||{},headings:v,title:y.sheetTitle||y.sheetTab},sheetInfo:M,headerRow:v}]}}return{output:T.data?.statusText?[T.data.statusText]:T.data?.sheetInfo,error:T.data?.error,errorDetails:T.data?.errorDetails,creditsUsed:T.data?.creditsUsed,warnings:T.data?.warnings,schemaHeaderSheetInfo:T.data?.schemaHeaderSheetInfo}}async function Br({toolArgs:e,plannerPrevSteps:t,files:n,trajectoryId:r,onStatusUpdate:o,agentLog:s,ctx:a,driveAuthToken:c}){o?.("Inferring sheet data...","Calling infer_sheet_data","execute");let i=e?.source_sheet_from_history||e?.sourceSheetFromHistory,u=i?$e(i,t):void 0,l=u?.sheetId||e?.sheet_id||e?.sheetId,d=u?.sheetTab||e?.sheet_tab_title||e?.sheetTabTitle,f=u?.sheetTabId||e?.sheet_tab_id||e?.sheetTabId,m=e?.output_destination||e?.outputDestination||e?.output_sheet_parameters||e?.outputSheetParameters,T=a.apiMode||!c||l&&fe(l),k;if(T&&l&&d){let S=a.tabularStore,y=f!==void 0?S.getTabByIndex(l,f):S.getTabByTitle(l,d);y&&(k=S.toAny2D(l,y.index,!0))}let b={siteId:a.siteId,...e,sheetId:l,sheetTabTitle:d,sheetTabId:f,sheetData:k,returnDataOnly:T,plannerPrevSteps:t,agentLog:{prevSteps:s?.prevSteps||[],chatLog:s?.chatLog||[]},llmIntegration:a.llmIntegration,apiMode:a.apiMode,apiToolsConfig:a.apiToolsConfig,authToken:c||"",timestamp:a.userTimestamp,trajectoryId:r,userProfile:a.userProfile,files:n},A=await pe(a,Q.infer,b);if(!A?.success)return{error:A?.error||"infer_sheet_data failed"};let O=Array.isArray(A.data?.data)?A.data.data:[];if(T&&l&&d){let S=a.tabularStore;if(!S.hasSheet(l))return{error:`Memory sheet not found: ${l}`};let y=He(e?.schema,O),v=m?.new_tab_title||m?.newTabTitle||m?.new_tab_title_template;if(v){let L=O.map(p=>y.map(g=>p?.[g]??"")),{sheetInfo:P,headerRow:_}=mn({store:S,target:{sheetId:l,sheetTitle:u?.sheetTitle,tabTitle:v},headers:y,rows:L,schema:e?.schema}),h=Te(S,P);return{output:O,schemaHeaderSheetInfo:[{headingInfo:{schema:e?.schema||{},headings:_,title:P.sheetTitle||P.sheetTab},sheetInfo:h,headerRow:_}],error:A.data?.error,errorDetails:A.data?.errorDetails,creditsUsed:A.data?.creditsUsed,warnings:A.data?.warnings}}let M=f!==void 0?S.getTab(l,f):S.getTabByTitle(l,d)||S.getTab(l,0);S.mergeHeaderRow(l,M.index,y),e?.schema&&S.setSchema(l,M.index,e.schema,{preserveHeader:!0});let H=!!e?.is_first_row_header||!!e?.isFirstRowHeader;for(let L of O){let P=L?.__row_number,_=typeof P=="number"?P-1-(H?1:0):void 0;if(_===void 0||_<0)continue;let h={};y.forEach(p=>{h[p]=L?.[p]??""}),S.upsertColumnsByHeader(l,M.index,_,h)}let F=S.toSheetInfo(l,M.index),R=Te(S,F),x=S.getTab(l,M.index).headerRow;return{output:O,schemaHeaderSheetInfo:[{headingInfo:{schema:e?.schema||{},headings:x,title:F.sheetTitle||F.sheetTab},sheetInfo:R,headerRow:x}],error:A.data?.error,errorDetails:A.data?.errorDetails,creditsUsed:A.data?.creditsUsed,warnings:A.data?.warnings}}return{output:O,schemaHeaderSheetInfo:A.data?.schemaHeaderSheetInfo,error:A.data?.error,errorDetails:A.data?.errorDetails,creditsUsed:A.data?.creditsUsed,warnings:A.data?.warnings}}async function Kr({userQuestion:e,trajectoryId:t,plannerPrevSteps:n,onStatusUpdate:r,agentLog:o,ctx:s}){r?.("Querying docs...","Calling query_rtrvr_docs","execute");let a={siteId:s.siteId,userQuestion:e,plannerPrevSteps:n,agentLog:{prevSteps:o?.prevSteps||[],chatLog:o?.chatLog||[]},llmIntegration:s.llmIntegration,apiMode:s.apiMode,apiToolsConfig:s.apiToolsConfig,authToken:"",timestamp:s.userTimestamp,trajectoryId:t,userProfile:s.userProfile},c=await pe(s,Q.queryRtrvrDocs,a);return c?.success?{output:c.data?.text||c.data?.data,error:c.data?.error,errorDetails:c.data?.errorDetails,creditsUsed:c.data?.creditsUsed,warnings:c.data?.warnings}:{error:c?.error||"query_rtrvr_docs failed"}}function Sn(e){let t=Y(e),n=String(t.message||"").toLowerCase();return t.code==="MISSING_API_KEY"||t.code==="INVALID_API_KEY"||t.code==="UNAUTHENTICATED"||n.includes("oauth")||n.includes("auth token")||n.includes("access token")||n.includes("google")}function kt(e,t=["authToken"]){let n={code:"MISSING_AUTH_TOKEN",message:`${e} requires authentication token.`,missing:t,requires_api_key:t.includes("apiKey"),retryable:!1,next_action:"Provide required auth token in tool args or rover.boot(...)."};return{output:ct(n),error:n.message,errorDetails:n,warnings:[`${e} skipped: missing ${t.join(", ")}`]}}function In(e,t,n){let r=e==="doc"?"In-Memory Doc Draft":"In-Memory Slides Draft",o=e==="doc"?`# ${r}
|
|
1
|
+
var Qe=class{tools=new Map;registerTool(t){t?.name&&this.tools.set(t.name,t)}getTool(t){return this.tools.get(t)}getToolFunctions(){let t={};for(let[n,r]of this.tools.entries())t[n]=r;return t}getFunctionDeclarations(){let t=[];for(let n of this.tools.values()){if(n.llmCallable===!1)continue;let r=n.schema??tr(n.parameters||{},n.required||[]);t.push({name:n.name,description:n.description,parameters:r})}return t}};function tr(e,t=[]){let n={};for(let[r,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let s=String(o.type||"string"),a={type:St(s),description:o.description,nullable:!t.includes(r)};if(s==="array"&&o.items&&(a.items={type:St(o.items.type||"string"),description:o.items.description}),s==="object"&&o.properties){a.properties={};for(let[c,i]of Object.entries(o.properties))a.properties[c]={type:St(i?.type||"string"),description:i?.description};Array.isArray(o.required)&&(a.required=o.required)}n[r]=a}return{type:"object",properties:n,required:t}}function St(e){switch(e){case"string":case"number":case"integer":case"boolean":case"array":case"object":return e;default:return"string"}}var Je;(function(e){e.FLASH_LITE="Gemini Flash Lite",e.FLASH="Gemini Flash",e.PRO="Gemini Pro"})(Je||(Je={}));var qt;(function(e){e[e.NativeHostConnected=0]="NativeHostConnected",e[e.NativeHostDisconnected=1]="NativeHostDisconnected"})(qt||(qt={}));var Ge="rtrvr_mem_",nr=["image/png","image/jpeg","image/webp"],rr=["application/pdf","text/plain"],Ss=[...nr,...rr];var N;(function(e){e.ACT="act_on_tab",e.CRAWL="crawl_and_extract_from_tab",e.EXTRACT="extract_from_tab",e.SHEETS_WORKFLOW="sheets_workflow",e.INFER_SHEET_DATA="infer_sheet_data",e.GRAPHBOT="graph_bot",e.PDF_FILLER="pdf_filler",e.CUSTOM_TOOL_GENERATOR="custom_tool_generator",e.WEBPAGE_GENERATOR="webpage_generator",e.GOOGLE_DOC_GENERATOR="google_doc_generator",e.GOOGLE_SLIDES_GENERATOR="google_slides_generator",e.PROCESS_TEXT="process_text",e.CREATE_SHEET_FROM_DATA="create_sheet_from_data",e.ROVER_EXTERNAL_READ_CONTEXT="rover_external_read_context",e.ROVER_EXTERNAL_ACT_CONTEXT="rover_external_act_context",e.CONFIGURE_API_KEY="configure_api_key",e.TASK_COMPLETE="task_complete",e.ASK_USER="ask_user",e.EXECUTE_MULTIPLE_TOOLS="execute_multiple_tools",e.QUERY_RTRVR_AI_DOCUMENTATION="query_rtrvr_ai_documentation"})(N||(N={}));var V;(function(e){e.PLANNER="Planner",e.AGENTIC_SEEK="Agentic Action",e.CRAWL_PAGES="Crawl Pages",e.EXTRACT_PAGE="Extract Page",e.SHEETS_WORKFLOW="Sheets Workflow",e.INFER_SHEET_DATA="Infer Sheet Data",e.MULTI_STEPS="Multi Steps",e.PDF_FILLER="PDF Filler",e.CUSTOM_TOOL_GENERATOR="Custom Tool Generator",e.WEBPAGE_GENERATOR="WebPage Generator",e.GOOGLE_DOC_GENERATOR="Google Doc Generator",e.GOOGLE_SLIDES_GENERATOR="Google Slides Generator",e.PROCESS_TEXT="Process Text",e.CREATE_SHEET_FROM_DATA="Create Sheet From Data",e.ROVER_EXTERNAL_READ_CONTEXT="Rover External Read Context",e.ROVER_EXTERNAL_ACT_CONTEXT="Rover External Act Context",e.EXECUTE_MULTIPLE_TOOLS="Execute Multiple User Tools",e.CONFIGURE_API_KEY="Configure Gemini API Key",e.QUERY_RTRVR_AI_DOCUMENTATION="query_rtrvr_ai_documentation"})(V||(V={}));var Is={[N.ACT]:V.AGENTIC_SEEK,[N.CRAWL]:V.CRAWL_PAGES,[N.EXTRACT]:V.EXTRACT_PAGE,[N.SHEETS_WORKFLOW]:V.SHEETS_WORKFLOW,[N.INFER_SHEET_DATA]:V.INFER_SHEET_DATA,[N.PDF_FILLER]:V.PDF_FILLER,[N.CUSTOM_TOOL_GENERATOR]:V.CUSTOM_TOOL_GENERATOR,[N.WEBPAGE_GENERATOR]:V.WEBPAGE_GENERATOR,[N.GOOGLE_DOC_GENERATOR]:V.GOOGLE_DOC_GENERATOR,[N.GOOGLE_SLIDES_GENERATOR]:V.GOOGLE_SLIDES_GENERATOR,[N.PROCESS_TEXT]:V.PROCESS_TEXT,[N.CREATE_SHEET_FROM_DATA]:V.CREATE_SHEET_FROM_DATA,[N.ROVER_EXTERNAL_READ_CONTEXT]:V.ROVER_EXTERNAL_READ_CONTEXT,[N.ROVER_EXTERNAL_ACT_CONTEXT]:V.ROVER_EXTERNAL_ACT_CONTEXT,[N.EXECUTE_MULTIPLE_TOOLS]:V.EXECUTE_MULTIPLE_TOOLS,[N.CONFIGURE_API_KEY]:V.CONFIGURE_API_KEY,[N.QUERY_RTRVR_AI_DOCUMENTATION]:V.QUERY_RTRVR_AI_DOCUMENTATION},It=20;var or=30,sr=320,ar=0,ir=50,cr=1,jt=Je.FLASH;var Es=V.PLANNER;var ws=20*1024*1024;var Wt={maxParallelTabs:4,pageLoadDelay:2e3,disableAutoScroll:!1,makeNewTabsActive:!1,writeRowProcessingTime:!1,totalBudgetMs:25e3,pageDataTimeoutMs:22e3,adaptiveSettleDebounceMs:or,adaptiveSettleMaxWaitMs:sr,adaptiveSettleRetries:ar,sparseTreeRetryDelayMs:ir,sparseTreeRetryMaxAttempts:cr,pdfTextSelectionTimeoutMs:12e3,onlyTextContent:!1};function ur(e){let t={...Wt,...e??{}},n=Number(e?.pdfTextSelectionTimeoutMs);return Number.isFinite(n)&&(t.pdfTextSelectionTimeoutMs=Math.floor(n)),t.totalBudgetMs!==void 0&&(t.totalBudgetMs=Math.max(1500,Math.floor(t.totalBudgetMs))),t.pageDataTimeoutMs!==void 0&&(t.pageDataTimeoutMs=Math.max(500,Math.floor(t.pageDataTimeoutMs))),t.pdfTextSelectionTimeoutMs!==void 0&&(t.pdfTextSelectionTimeoutMs=Math.max(150,Math.floor(t.pdfTextSelectionTimeoutMs))),t.adaptiveSettleDebounceMs!==void 0&&(t.adaptiveSettleDebounceMs=Math.max(20,Math.min(500,Math.floor(t.adaptiveSettleDebounceMs)))),t.adaptiveSettleMaxWaitMs!==void 0&&(t.adaptiveSettleMaxWaitMs=Math.max(120,Math.min(5e3,Math.floor(t.adaptiveSettleMaxWaitMs)))),t.adaptiveSettleRetries!==void 0&&(t.adaptiveSettleRetries=Math.max(0,Math.min(6,Math.floor(t.adaptiveSettleRetries)))),t.sparseTreeRetryDelayMs!==void 0&&(t.sparseTreeRetryDelayMs=Math.max(40,Math.min(1e3,Math.floor(t.sparseTreeRetryDelayMs)))),t.sparseTreeRetryMaxAttempts!==void 0&&(t.sparseTreeRetryMaxAttempts=Math.max(0,Math.min(4,Math.floor(t.sparseTreeRetryMaxAttempts)))),t}var lr=["disableAutoScroll","onlyTextContent","totalBudgetMs","pageDataTimeoutMs","pdfTextSelectionTimeoutMs","adaptiveSettleDebounceMs","adaptiveSettleMaxWaitMs","adaptiveSettleRetries","sparseTreeRetryDelayMs","sparseTreeRetryMaxAttempts"];function Bt(e){if(!e||typeof e!="object")return;let t=e,n={};typeof t.disableAutoScroll=="boolean"&&(n.disableAutoScroll=t.disableAutoScroll),typeof t.onlyTextContent=="boolean"&&(n.onlyTextContent=t.onlyTextContent);let r=["totalBudgetMs","pageDataTimeoutMs","pdfTextSelectionTimeoutMs","adaptiveSettleDebounceMs","adaptiveSettleMaxWaitMs","adaptiveSettleRetries","sparseTreeRetryDelayMs","sparseTreeRetryMaxAttempts"];for(let a of r){let c=Number(t[a]);Number.isFinite(c)&&(n[a]=Math.trunc(c))}if(!Object.keys(n).length)return;let o=ur(n),s={};for(let a of lr)n[a]!==void 0&&o[a]!==void 0&&(s[a]=o[a]);return Object.keys(s).length?s:void 0}var dr=()=>typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;function Ze(e){return(e||"").trim()||"Data"}function zt(e,t){return e.length>=t?e:[...e,...new Array(t-e.length).fill("")]}function Et(e,t){if(e.length===t)return e;if(e.length>t)return e.slice(0,t);let n=e.slice();for(;n.length<t;)n.push("");return n}function Kt(e){return e?.properties?Object.keys(e.properties):[]}function Vt(e){try{return new TextEncoder().encode(JSON.stringify(e)).length}catch{return 0}}function fr(e){return!e||typeof e!="object"?!1:"properties"in e||"anyOf"in e||"type"in e}var pe=class{label;memSheets=new Map;constructor(t){this.label=t}createSheet(t,n){let r=`${Ge}${dr()}`;return this.createSheetWithId(r,t,n)}createSheetWithId(t,n,r){let o=Date.now(),s={id:t,title:Ze(n),tabs:new Map,tabTitleToIndex:new Map,nextTabIndex:0,createdAt:o,updatedAt:o,meta:r};return this.memSheets.set(t,s),this.addTab(t,{title:s.title||"Data",headerRow:[],data:[]}),s}getOrCreateSheet(t,n,r){return t&&this.memSheets.has(t)?this.memSheets.get(t):t&&t.startsWith(Ge)?(console.warn(`[TabularStore] getOrCreateSheet: memory sheet ${t} not found. Recreating empty sheet.`),this.createSheetWithId(t,n,r)):this.createSheet(n||t,r)}hasSheet(t){return this.memSheets.has(t)}getSheet(t){let n=this.memSheets.get(t);if(!n)throw new Error(`Memory sheet not found: ${t}`);return n}deleteSheet(t){return this.memSheets.delete(t)}listSheets(){return[...this.memSheets.values()]}clearAll(){this.memSheets.clear()}addTab(t,n){let r=this.getSheet(t),o=r.nextTabIndex++,s=Date.now(),a=this.makeUniqueTabTitle(r,n.title),c={index:o,title:a,headerRow:n.headerRow||[],data:n.data||[],schema:n.schema,createdAt:s,updatedAt:s,meta:n.meta};return r.tabs.set(o,c),r.tabTitleToIndex.set(a.toLowerCase(),o),r.updatedAt=s,c}getTab(t,n=0){let o=this.getSheet(t).tabs.get(n);if(!o)throw new Error(`Memory tab not found: ${t}/tab/${n}`);return o}getTabByTitle(t,n){let r=this.memSheets.get(t);if(!r)return null;let o=r.tabTitleToIndex.get(n.toLowerCase());return o===void 0?null:r.tabs.get(o)??null}hasTab(t,n){let r=this.memSheets.get(t);return!!r&&r.tabs.has(n)}getTabByIndex(t,n=0){let r=this.memSheets.get(t);return r?r.tabs.get(n)??null:null}ensureTab(t,n,r={}){let o=this.getSheet(t),s=Ze(n),a=this.getTabByTitle(t,s);if(a)return a;if(r.createIfMissing??!0)return this.addTab(t,{title:s,headerRow:[],data:[]});let c=this.getTabByIndex(t,0);return c||this.addTab(t,{title:s,headerRow:[],data:[]})}makeUniqueTabTitle(t,n,r){let o=Ze(n),s=o.toLowerCase(),a=t.tabTitleToIndex.get(s);if(a===void 0||a===r)return o;let c=2;for(;t.tabTitleToIndex.has(`${o} (${c})`.toLowerCase());)c++;return`${o} (${c})`}renameTab(t,n,r){let o=this.getSheet(t),s=this.getTab(t,n),a=s.title.toLowerCase(),c=Ze(r);if(c.toLowerCase()===a){s.title=c,s.updatedAt=Date.now(),o.updatedAt=s.updatedAt,o.tabTitleToIndex.set(a,n);return}o.tabTitleToIndex.delete(a);let u=this.makeUniqueTabTitle(o,c,n);s.title=u,s.updatedAt=Date.now(),o.tabTitleToIndex.set(u.toLowerCase(),n),o.updatedAt=s.updatedAt}deleteTab(t,n){let r=this.getSheet(t),o=r.tabs.get(n);return o?(r.tabTitleToIndex.delete(o.title.toLowerCase()),r.tabs.delete(n),r.updatedAt=Date.now(),!0):!1}listTabs(t){return[...this.getSheet(t).tabs.values()].sort((r,o)=>r.index-o.index)}setHeaderRow(t,n,r){let o=this.getTab(t,n);o.headerRow=r.map(String),o.data=o.data.map(s=>Et(s,o.headerRow.length)),o.updatedAt=Date.now(),this.touchSheet(t)}mergeHeaderRow(t,n,r){let o=this.getTab(t,n),s=o.headerRow.length,a=new Set(o.headerRow.map(i=>i.toLowerCase()));for(let i of r){let u=String(i).toLowerCase();a.has(u)||(o.headerRow.push(String(i)),a.add(u))}let c=o.headerRow.length;return c>s&&(o.data=o.data.map(i=>zt(i,c))),o.updatedAt=Date.now(),this.touchSheet(t),o.headerRow}setSchema(t,n,r,o={}){let s=this.getTab(t,n);if(s.schema=r,!o.preserveHeader&&r?.properties){let a=Kt(r);if(a.length){let c=s.headerRow;if(!c.length)s.headerRow=a.slice();else{let u=new Set(a.map(d=>d.toLowerCase())),l=[];for(let d of a)l.push(d);for(let d of c)u.has(d.toLowerCase())||l.push(d);s.headerRow=l}let i=s.headerRow.length;s.data=s.data.map(u=>Et(u,i))}}s.updatedAt=Date.now(),this.touchSheet(t)}appendRows(t,n,r,o={}){let s=this.getTab(t,n),a=o.alignToHeader!==!1,c=s.headerRow.length;for(let i of r){let u=a&&c>0?Et(i,c):i.slice();s.data.push(u)}s.updatedAt=Date.now(),this.touchSheet(t)}upsertColumnsByHeader(t,n,r,o,s={}){let a=this.getTab(t,n),c=s.createMissingHeaders??!0,i=new Map;a.headerRow.forEach((d,f)=>i.set(d,f));for(let d of Object.keys(o))if(!i.has(d)){if(!c)continue;let f=a.headerRow.length;a.headerRow.push(d),i.set(d,f),a.data=a.data.map(h=>zt(h,a.headerRow.length))}let u=a.headerRow.length;for(;a.data.length<=r;)a.data.push(new Array(u).fill(""));let l=a.data[r];for(let[d,f]of Object.entries(o)){let h=i.get(d);h!==void 0&&(l[h]=f)}a.updatedAt=Date.now(),this.touchSheet(t)}toAny2D(t,n=0,r=!0){let o=this.getTab(t,n),s=o.data.map(a=>a.slice());return r?[o.headerRow.slice(),...s]:s}toObjects(t,n=0,r={}){let o=this.getTab(t,n),s=o.headerRow,a=r.maxRows??o.data.length,c=[];for(let i=0;i<o.data.length&&i<a;i++){let u=o.data[i],l={};for(let d=0;d<s.length;d++)l[s[d]]=u[d];c.push(l)}return c}toSheetInfo(t,n=0){let r=this.getSheet(t),o=this.getTab(t,n);return{sheetId:t,sheetTitle:r.title,sheetTab:o.title,sheetTabId:o.index,sheetTabs:this.listTabs(t).map(s=>({id:s.index,title:s.title})),kind:"memory"}}publishFromObjects(t,n,r={}){let o=t.headerRow||t.headingInfo.headings||Object.keys(t.headingInfo.schema?.properties??{}),s=n.map(c=>o.map(i=>c[i]??"")),a=o.length?[o,...s]:s;return this.publishFromSheetWorkflow(t,a,r)}publishFromSheetWorkflow(t,n,r={}){let o=t.sheetInfo,s=r.sheetTitle||t.headingInfo.title||o?.sheetTitle||"Data",a=r.tabTitle||o?.newTabTitle||o?.sheetTab||"Data",c=r.schema||t.headingInfo.schema,i=Kt(c),u=this.getOrCreateSheet(o?.sheetId&&o.sheetId.startsWith(Ge)?o.sheetId:void 0,s),l=this.ensureTab(u.id,a,{createIfMissing:!0}),d=r.mergeWithExistingHeader??!0,f=l.headerRow.length>0;i.length?f&&d?this.mergeHeaderRow(u.id,l.index,i):this.setHeaderRow(u.id,l.index,i):t.headerRow?.length&&(f&&d?this.mergeHeaderRow(u.id,l.index,t.headerRow):this.setHeaderRow(u.id,l.index,t.headerRow)),this.setSchema(u.id,l.index,c,{preserveHeader:!0});let h=this.getTab(u.id,l.index).headerRow,y=n.length&&h.length&&n[0].length===h.length&&n[0].every((v,I)=>String(v).trim().toLowerCase()===h[I].trim().toLowerCase())?n.slice(1):n;return this.appendRows(u.id,l.index,y,{alignToHeader:r.alignToHeader??!0}),t.sheetInfo={sheetId:u.id,sheetTitle:u.title,sheetTab:l.title,sheetTabId:l.index,sheetTabs:this.listTabs(u.id).map(v=>({title:v.title,id:v.index})),kind:"memory"},t.headerRow=h,t.headingInfo.headings=h,t}publishNewTab(t,n,r,o,s){let a;s?fr(s)&&!("sheetTitle"in s)?a={schema:s}:a=s:a={};let c=this.getOrCreateSheet(t),i,u=a.mergeWithExistingHeader??!0;if(a.createTabIfMissing===!1){let l=this.getTabByTitle(c.id,n);l?(i=l,i.headerRow.length?u&&this.mergeHeaderRow(c.id,i.index,r):this.setHeaderRow(c.id,i.index,r)):i=this.addTab(c.id,{title:n,headerRow:r,data:[],schema:a.schema,meta:void 0})}else i=this.addTab(c.id,{title:n,headerRow:r,data:[],schema:a.schema,meta:void 0});return this.appendRows(c.id,i.index,o,{alignToHeader:a.alignToHeader??!0}),i}estimateTabSizeBytes(t,n=0){let r=this.getTab(t,n),o=Vt(r.headerRow),s=r.data,a=500,c=0,i=Math.min(s.length,a);for(let u=0;u<i;u++)c+=Vt(s[u]);return s.length>i&&i>0&&(c=Math.round(c*(s.length/i))),o+c}touchSheet(t){let n=this.memSheets.get(t);n&&(n.updatedAt=Date.now())}},ge=e=>!!e&&e.startsWith(Ge);function Xt(e){let t=String(e||"").toLowerCase();return t.includes("stale_seq")||t.includes("stale seq")?"STALE_SEQ":t.includes("stale_epoch")||t.includes("stale epoch")?"STALE_EPOCH":t.includes("session token")&&t.includes("expired")?"SESSION_TOKEN_EXPIRED":t.includes("session token")&&t.includes("invalid")?"SESSION_TOKEN_INVALID":t.includes("bootstrap")&&t.includes("required")?"BOOTSTRAP_REQUIRED":t.includes("navigation handoff")?"NAVIGATION_HANDOFF_PENDING":(t.includes("auth token")||t.includes("authentication token"))&&(t.includes("missing")||t.includes("required"))?"MISSING_AUTH_TOKEN":t.includes("missing auth")||t.includes("requires auth")||t.includes("requires authentication")?"MISSING_AUTH":t.includes("api key")&&(t.includes("missing")||t.includes("required"))?"MISSING_API_KEY":t.includes("invalid")&&t.includes("api key")?"INVALID_API_KEY":t.includes("unauthenticated")||t.includes("authentication")?"UNAUTHENTICATED":t.includes("permission")?"PERMISSION_DENIED":t.includes("insufficient credits")||t.includes("credits")?"INSUFFICIENT_CREDITS":t.includes("not supported")||t.includes("unsupported")?"TOOL_UNSUPPORTED":t.includes("network")||t.includes("fetch")?"NETWORK_ERROR":"UNKNOWN_ERROR"}function et(e){if(e==="MISSING_AUTH"||e==="MISSING_AUTH_TOKEN")return"Provide a valid rvrsess_* sessionToken from /v2/rover/session/open in rover.boot(...).";if(e==="MISSING_API_KEY")return"Use a Rover session token (rvrsess_*) from /v2/rover/session/open.";if(e==="INVALID_API_KEY")return"Use a valid active Rover session token or rotate your site public key.";if(e==="STALE_SEQ")return"Sync session projection and retry with latest seq.";if(e==="STALE_EPOCH")return"Refresh session token/projection and retry with latest epoch.";if(e==="SESSION_TOKEN_EXPIRED")return"Refresh session via /v2/rover/session/open using bootstrap public key (pk_site_*), then retry.";if(e==="SESSION_TOKEN_INVALID")return"Initialize a fresh session token via /v2/rover/session/open and retry.";if(e==="BOOTSTRAP_REQUIRED")return"Provide a valid pk_site_* key in bootstrapToken/publicKey and retry session start.";if(e==="NAVIGATION_HANDOFF_PENDING")return"Wait for post-navigation hydration/projection sync and retry."}function Y(e,t="Operation failed"){let n=String(e?.error||"").trim().toLowerCase();if(n==="stale_seq"||n==="stale_epoch"||n==="session_token_expired"||n==="session_token_invalid"||n==="bootstrap_required"){let i=n==="stale_epoch"?"STALE_EPOCH":n==="session_token_expired"?"SESSION_TOKEN_EXPIRED":n==="session_token_invalid"?"SESSION_TOKEN_INVALID":n==="bootstrap_required"?"BOOTSTRAP_REQUIRED":"STALE_SEQ",u=e?.data&&typeof e.data=="object"?e.data:{},l=typeof u?.reason=="string"?u.reason:n==="stale_epoch"?"Session epoch is stale.":n==="session_token_expired"?"Session token expired.":n==="session_token_invalid"?"Session token invalid.":n==="bootstrap_required"?"Bootstrap token required.":"Run sequence is stale.";return{code:i,message:l,next_action:et(i),retryable:i==="STALE_SEQ"||i==="STALE_EPOCH"||i==="SESSION_TOKEN_EXPIRED",details:e}}let r=e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"?e:void 0,o=e?.roverError||e?.errorDetails||(typeof e?.error=="object"?e.error:void 0)||r;if(o&&typeof o=="object"&&o.code&&o.message){let i=String(o.code||"").trim(),l=i==="stale_seq"?"STALE_SEQ":i==="stale_epoch"?"STALE_EPOCH":i==="session_token_expired"?"SESSION_TOKEN_EXPIRED":i==="session_token_invalid"?"SESSION_TOKEN_INVALID":i==="bootstrap_required"?"BOOTSTRAP_REQUIRED":i==="navigation_handoff_pending"?"NAVIGATION_HANDOFF_PENDING":i,d=typeof o.retryable=="boolean"?o.retryable:l==="STALE_SEQ"||l==="STALE_EPOCH"||l==="SESSION_TOKEN_EXPIRED"||l==="NAVIGATION_HANDOFF_PENDING";return{code:l,message:o.message,requires_api_key:!!o.requires_api_key,missing:Array.isArray(o.missing)?o.missing:void 0,next_action:o.next_action||et(l),retryable:d,degraded:o.degraded,details:o.details}}if(typeof e=="string"){let i=e||t,u=Xt(i);return{code:u,message:i,requires_api_key:u==="MISSING_API_KEY"||u==="INVALID_API_KEY",missing:u==="MISSING_AUTH"||u==="MISSING_AUTH_TOKEN"?["authToken"]:void 0,next_action:et(u),retryable:u==="NETWORK_ERROR"||u==="STALE_SEQ"||u==="STALE_EPOCH"||u==="SESSION_TOKEN_EXPIRED"||u==="NAVIGATION_HANDOFF_PENDING"}}let s=String(e?.message||e?.error||t),a=Xt(s),c=a==="MISSING_API_KEY"||a==="INVALID_API_KEY";return{code:a,message:s,requires_api_key:c,missing:c?["publicKey"]:a==="MISSING_AUTH"||a==="MISSING_AUTH_TOKEN"?["authToken"]:void 0,next_action:et(a),retryable:a==="NETWORK_ERROR"||a==="STALE_SEQ"||a==="STALE_EPOCH"||a==="SESSION_TOKEN_EXPIRED"||a==="NAVIGATION_HANDOFF_PENDING",details:e}}function xe(e){let t=new Error(e.message);return t.roverError=e,t}function Yt(e){let t=Y(e);return!!t.requires_api_key||t.code==="MISSING_API_KEY"||t.code==="INVALID_API_KEY"}var en="https://extensionrouter.rtrvr.ai",pr=new Set(["generate_sheets","generate_docs","generate_slides","generate_websites"]),gr={generate_pdfs:"generate_docs",pdf_filling:"generate_docs",generate_web_pages:"generate_websites"},Qt={enableExternalWebContext:!1,scrapeMode:"off"};function mr(e){if(!e)return;let t=Array.isArray(e.enableAdditionalTools)?e.enableAdditionalTools:[],n=Array.from(new Set(t.map(r=>{let o=gr[r]||r;return pr.has(o)?o:null}).filter(r=>!!r)));return{mode:e.mode||"none",userDefined:Array.isArray(e.userDefined)?e.userDefined:[],enableAdditionalTools:n}}function Jt(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let o=String(r||"").trim().toLowerCase().replace(/^\./,"");!o||t.has(o)||(t.add(o),n.push(o))}return n}function tn(e){let t=String(e||"").trim();if(t)return t.slice(0,64)}function hr(e){try{return new URL(String(e||"")).hostname.toLowerCase()}catch{return}}function Zt(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return!1;if(n==="*")return!0;if(n.startsWith("*.")){let r=n.slice(2);return!!r&&(e===r||e.endsWith(`.${r}`))}return e===n||e.endsWith(`.${n}`)}function _r(e){return{enableExternalWebContext:e?.enableExternalWebContext??Qt.enableExternalWebContext,scrapeMode:e?.scrapeMode==="on_demand"?"on_demand":Qt.scrapeMode,allowDomains:Jt(e?.allowDomains),denyDomains:Jt(e?.denyDomains)}}function Tr(e,t){let n=hr(e);return n?t.denyDomains.some(r=>Zt(n,r))?{allowed:!1,reason:"deny_rule"}:t.allowDomains.length?t.allowDomains.some(r=>Zt(n,r))?{allowed:!0}:{allowed:!1,reason:"not_in_allowlist"}:{allowed:!0}:{allowed:!1,reason:"invalid_url"}}function br(e){if(!Array.isArray(e))return[];let t=new Map;for(let n of e){let r=Number(n?.tabId);if(!Number.isFinite(r))continue;let o=n?.accessMode==="external_scraped"?"external_scraped":"external_placeholder",s=String(n?.host||"").trim()||void 0,a=String(n?.title||"").trim()||void 0,c=String(n?.reason||"").trim()||void 0;t.set(r,{tabId:r,accessMode:o,host:s,title:a,reason:c})}return Array.from(t.values())}function yr(e,t){if(e==="act")return"act";if(e==="read_context")return"read_context";if(e==="open_only")return"open_only";let n=String(t||"").toLowerCase();if(!n.trim())return"read_context";let r=/\b(fill|submit|book|buy|purchase|apply|sign up|signup|log in|login|register|delete|update|create|post|send|checkout|pay)\b/i,o=/\b(search|search for|look up|lookup|browse|filter|sort|select|choose|pick|add to cart|compare prices|find reviews|pull reviews)\b/i,s=/\b(open|navigate|go to|visit|take me to|bring me to)\b/i,a=/\b(read|summarize|extract|inspect|analyze|check|find|lookup|list|show|compare|review)\b/i;return r.test(n)&&!/\b(do not|don't)\b/i.test(n)||o.test(n)?"act":(s.test(n)&&!a.test(n)||a.test(n),"read_context")}function Sr(e){let t=en,n=String(e||t).trim().replace(/\/+$/,"");if(!n)return t;if(n.endsWith("/extensionRouter"))return n;try{let r=new URL(n),o=r.pathname.replace(/\/+$/,"");if(o&&o!=="/"||r.hostname.toLowerCase()==="extensionrouter.rtrvr.ai")return n}catch{}return`${n}/extensionRouter`}function Ir(e){let t=en,n=String(e||t).trim().replace(/\/+$/,"");return n?n.endsWith("/extensionRouter")?`${n.slice(0,-16)}/v2/rover`:n.endsWith("/v2/rover")?n:`${n}/v2/rover`:`${t}/v2/rover`}function wt(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`}function Er(e){let t=e.runtimeContext;if(!t||t.mode!=="rover_embed")return;let n=br(t.externalTabs).slice(0,8);return{mode:"rover_embed",agentName:tn(t.agentName)||"Rover",externalNavigationPolicy:t.externalNavigationPolicy||e.externalNavigationPolicy,tabIdContract:t.tabIdContract||"tree_index_mapped_by_tab_order",...n.length?{externalTabs:n}:{}}}function Rt(e){let t=tn(e.agentName)||"Rover",n=e.reason||"external_domain_inaccessible",r=e.title||"External Tab (Inaccessible)",o=e.url||"",s=n?` Reason: ${n}.`:"";return{url:o,title:r,contentType:"text/html",content:`${t} cannot access this external page directly. To read this page's content when you know its exact URL, use 'rover_external_read_context' with the URL (supports multiple URLs via 'urls' param). For tasks requiring search, navigation, or interaction (e.g. searching Google, browsing results, filtering), use 'rover_external_act_context' with the FULL task description in 'message'.${s}`,metadata:{inaccessible:!0,external:!0,accessMode:"external_placeholder",reason:n,logicalTabId:e.tabId}}}function wr(){let e=new Date,t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0"),o=e.getHours(),s=String(e.getMinutes()).padStart(2,"0"),a=o>=12?"PM":"AM";o=o%12,o=o||12;let c=String(o).padStart(2,"0");return`${t}/${n}/${r} ${c}:${s} ${a}`}function nn(e,t,n){let r=wr(),o=typeof e.apiMode=="boolean"?e.apiMode:!!String(e.sessionToken||e.authToken||"").trim(),s={model:e.llmIntegration?.model||e.model||jt},a=e.googleAiStudioApiKeys||e.llmIntegration?.apiKeys,c=e.googleAiStudioApiKey||e.llmIntegration?.apiKey;a&&a.length>0?(s.enableGoogleAiStudioApiKey=!0,s.apiKeys=a):c?(s.enableGoogleAiStudioApiKey=!0,s.apiKey=c):e.llmIntegration?.enableGoogleAiStudioApiKey&&(s.enableGoogleAiStudioApiKey=!0);let i=Sr(e.apiBase),u=Ir(e.apiBase),l=Er(e),d=_r(e.tools?.web),f=new Map,h=new Map,y,v=0,I=0,C=[1e3,3e3],F=C.length,R=250,P=45e3,b=async(E,p)=>{let m=String(e.sessionToken||e.authToken||"").trim();if(!m||!m.startsWith("rvrsess_"))for(let g=0;g<3&&(await new Promise(_=>setTimeout(_,800)),m=String(e.sessionToken||e.authToken||"").trim(),!(m&&m.startsWith("rvrsess_")));g++);if(!m||!m.startsWith("rvrsess_"))throw xe({code:"MISSING_AUTH_TOKEN",message:"Rover session token is required to call backend action routes.",requires_api_key:!1,next_action:"Initialize Rover session via /v2/rover/session/open and pass sessionToken to rover.boot(...).",retryable:!1});let T;for(let g=0;g<=F;g++){g>0&&await new Promise(w=>setTimeout(w,C[g-1]));let _=await fetch(i,{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify({action:E,data:p&&typeof p=="object"?{...p,sessionToken:m,sessionId:String(e.sessionId||"").trim()||void 0,runId:String(e.activeRunId||"").trim()||void 0,requestNonce:wt(),...!p.runtimeContext&&l?{runtimeContext:l}:{}}:{payload:p,sessionToken:m,sessionId:String(e.sessionId||"").trim()||void 0,runId:String(e.activeRunId||"").trim()||void 0,requestNonce:wt()}}),signal:e.signal});if(!_.ok){if(_.status===429){let S=Number(_.headers.get("Retry-After"))||0,G=xe({code:"RATE_LIMITED",message:"Rate limited by backend",retryable:!0,details:{status:429,retryAfter:S}});if(g<F){T=G;continue}throw G}let w;try{w=await _.json()}catch{let S=await _.text().catch(()=>"");S&&(w={error:S})}let D=Y(w,`HTTP ${_.status}`);throw xe({...D,details:{status:_.status,endpoint:i,action:E,response:w}})}let A=await _.json();if(A?.success===!1){let w=Y(A,A?.error||"extensionRouter returned success=false");throw xe({...w,details:{endpoint:i,action:E,response:A}})}return A}throw T||new Error("callExtensionRouter: unexpected retry exhaustion")},k=async(E,p)=>{let m=String(E||"").trim();if(!m)throw new Error("external page data requires url");let T=Number(p?.tabId)||0,g=p?.source||"direct_url",_=p?.intent==="act"?"act":p?.intent==="open_only"?"open_only":"read_context",A=`${T}:${_}:${g}:${m}`,w=Date.now(),D=f.get(A);if(D&&w-D.ts<=P)return D.data;f.delete(A);let S=h.get(A);if(S&&w-S.ts<=P)throw new Error(S.message||"external page data fetch failed");if(h.delete(A),y)throw new Error(y);let G=String(e.sessionToken||"").trim();if(!G.startsWith("rvrsess_"))throw xe({code:"MISSING_AUTH_TOKEN",message:"External context requires a Rover session token.",next_action:"Initialize Rover v2 session/open before requesting external context.",retryable:!1});try{let O=await fetch(`${u}/context/external`,{method:"POST",headers:{"Content-Type":"text/plain"},body:JSON.stringify({requestNonce:wt(),sessionToken:G,sessionId:String(e.sessionId||"").trim()||void 0,runId:String(p?.runId||e.activeRunId||"").trim()||void 0,expectedEpoch:Number.isFinite(Number(e.sessionEpoch))?Number(e.sessionEpoch):void 0,expectedSeq:Number.isFinite(Number(e.sessionSeq))?Number(e.sessionSeq):void 0,logicalTabId:Number(p?.tabId)>0?String(Math.trunc(Number(p?.tabId))):void 0,intent:_,url:m,source:g,message:p?.message,timeoutMs:_==="act"?72e4:3e5}),signal:e.signal}),U=await O.json().catch(()=>{});if(!O.ok||U?.success===!1){let q=Y(U,U?.error||`external context request failed (${O.status})`);throw xe({...q,details:{endpoint:`${u}/context/external`,status:O.status,response:U}})}let H=U?.data?.pageData||U?.data;return f.set(A,{data:H,ts:w}),H}catch(O){let U=Y(O,"external page data fetch failed"),H=U?.message||"external page data fetch failed";throw h.set(A,{message:H,ts:w}),(U.code==="PERMISSION_DENIED"||U.code==="MISSING_API_KEY"||U.code==="INVALID_API_KEY")&&(y=`${U.code}: ${H}`),O}},M=async()=>{let E=Date.now();if(v>0&&E-I<=R)return v;try{let p=await t("getTabContext"),m=Number(p?.activeLogicalTabId||p?.logicalTabId||p?.id);if(Number.isFinite(m)&&m>0)return v=m,I=E,m}catch{}},$=async(E,p)=>{let m=Number(E),T=p&&typeof p=="object"?p:void 0,g=T?.__roverAllowExternalFetch===!0,_=T?.__roverExternalIntent==="act"||T?.__roverExternalIntent==="open_only"||T?.__roverExternalIntent==="read_context"||T?.__roverExternalIntent==="auto"?T.__roverExternalIntent:"auto",A=typeof T?.__roverExternalMessage=="string"?String(T.__roverExternalMessage):void 0,w=yr(_,A),D=T&&typeof T=="object"?Object.fromEntries(Object.entries(T).filter(([ue])=>ue!=="__roverAllowExternalFetch"&&ue!=="__roverExternalIntent"&&ue!=="__roverExternalMessage")):void 0,S=Bt({...e.pageConfig||{},...D||{}}),G=!!S&&Object.keys(S).length>0,O=T?await t("getPageData",G?{pageConfig:S,tabId:m}:{tabId:m}):await t("getPageData",{tabId:m}),U=O?.metadata||{};if(!(!!U?.external||U?.accessMode==="external_placeholder"||U?.accessMode==="external_scraped"))return O;let q=typeof O?.url=="string"?O.url.trim():"";if(!d.enableExternalWebContext||d.scrapeMode==="off"||!q)return O;if(y)return Rt({tabId:m,url:q,title:O?.title,agentName:l?.agentName,reason:`cloud_fetch_disabled:${y}`});let K=Tr(q,{allowDomains:d.allowDomains,denyDomains:d.denyDomains});if(!K.allowed)return Rt({tabId:m,url:q,title:O?.title,agentName:l?.agentName,reason:`policy_blocked:${K.reason||"blocked"}`});let Te=await M();if(!(g||(Te?Te===m:!1)))return O;try{let ue=await k(q,{tabId:m,source:q.includes("google.com/search")?"google_search":"direct_url",intent:w,message:A});return w==="open_only"?O:ue&&typeof ue=="object"?{...ue,metadata:{...ue.metadata||{},external:!0,accessMode:"external_scraped",logicalTabId:m}}:O}catch(ue){let er=Y(ue,"external page data fetch failed");return Rt({tabId:m,url:q,title:O?.title,agentName:l?.agentName,reason:`cloud_fetch_failed:${er?.code||"unknown"}`})}},x=e.userProfile||(e.userContext?{userContext:e.userContext}:void 0),L=o?{enableAdditionalTools:["generate_sheets","generate_docs","generate_slides","generate_websites"],mode:"none"}:void 0;return{userTimestamp:r,siteId:e.siteId,llmIntegration:s,userProfile:x,rootUserInput:typeof e.rootUserInput=="string"&&e.rootUserInput.trim()?e.rootUserInput.trim():void 0,getPageData:$,getExternalPageData:k,callExtensionRouter:b,apiMode:o,apiToolsConfig:mr(e.apiToolsConfig??L),tabularStore:n??new pe(`rover-${r}`),signal:e.signal}}var Rr=async(e,t)=>{let n=await t();if(!e||!n)throw new Error("Missing sheetId or authToken. Cannot fetch metadata.");let r=await fetch(`https://sheets.googleapis.com/v4/spreadsheets/${e}`,{headers:{Authorization:`Bearer ${n}`}});if(!r.ok){let s=new Error(`HTTP error ${r.status}: ${r.statusText}`);throw s.status=r.status,s}return await r.json()};var on=async(e,t)=>{let n=await Rr(e,t);if(!n||!n.sheets)throw new Error("Sheet Data missing or malformed after successful fetch");let r=n.sheets.map(o=>({id:o.properties.sheetId,title:o.properties.title}));return{sheetTitle:n.properties?.title,sheetTabs:r}};async function sn(e,t,n){return xr(e,t,n)}var xr=async(e,t,n)=>{let r=await n();if(!(!e||!t||!r))try{let o=encodeURIComponent(`'${t}'`),s=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${o}?valueRenderOption=FORMATTED_VALUE`,a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${o}?valueRenderOption=FORMULA`,c={Authorization:`Bearer ${r}`},[i,u]=await Promise.all([fetch(s,{headers:c}),fetch(a,{headers:c})]);if(!i.ok)throw new Error("Values fetch failed: "+i.statusText);if(!u.ok)throw new Error("Formulas fetch failed: "+u.statusText);let l=await i.json(),d=await u.json(),f=l?.values??[],h=d?.values??[];return vr(f,h)}catch(o){console.error("Error fetching sheet tab data:",o);return}},rn=e=>e.reduce((t,n)=>Math.max(t,n?.length??0),0),Ar=e=>e==null?"null":Array.isArray(e)?"array":typeof e,vr=(e,t)=>{let n=Math.max(e.length,t.length),r=Math.max(rn(e),rn(t)),o=new Array(n);for(let s=0;s<n;s++){let a=new Array(r);for(let c=0;c<r;c++){let i=e[s]?.[c]??null,u=t[s]?.[c],l=typeof u=="string"&&u.startsWith("=");a[c]=l?{v:i,f:u,t:Ar(i)}:i}o[s]=a}return o};var $e=async(e,t,n,r={},o="POST")=>{let s=await t();if(!s)throw new Error("Google authentication token is not available.");let a,c;if(n==="batchUpdate")a=`https://sheets.googleapis.com/v4/spreadsheets/${e}:batchUpdate`,c=JSON.stringify(r),o="POST";else if(n==="values.update"){let{range:l,valueInputOption:d,resource:f}=r;a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${encodeURIComponent(l)}?valueInputOption=${encodeURIComponent(d)}`,c=JSON.stringify(f),o="PUT"}else if(n==="values.append"){let{range:l,valueInputOption:d,insertDataOption:f,resource:h}=r,y=encodeURIComponent(d??"USER_ENTERED"),v=encodeURIComponent(f??"INSERT_ROWS");a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${encodeURIComponent(l)}:append?valueInputOption=${y}&insertDataOption=${v}`,c=JSON.stringify(h),o="POST"}else if(n==="values.get"){let{range:l,...d}=r,f=new URLSearchParams(d).toString();a=`https://sheets.googleapis.com/v4/spreadsheets/${e}/values/${encodeURIComponent(l)}${f?`?${f}`:""}`,c=void 0,o="GET"}else if(n==="addSheet")a=`https://sheets.googleapis.com/v4/spreadsheets/${e}:batchUpdate`,c=JSON.stringify({requests:[{addSheet:r}]}),o="POST";else if(n==="get"){let l=new URLSearchParams(r).toString();a=`https://sheets.googleapis.com/v4/spreadsheets/${e}?${l}`,c=void 0,o="GET"}else{let l=new URLSearchParams(r).toString();a=`https://sheets.googleapis.com/v4/spreadsheets/${e}?${l}`,c=void 0,o="GET"}let i=await fetch(a,{method:o,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},...c&&{body:c}});if(!i.ok){let l=await i.json().catch(()=>({error:{message:"Unknown API error"}}));throw console.error("Google Sheets API Error:",l),new Error(l.error?.message||`API request failed with status ${i.status}`)}let u=await i.json();return n==="addSheet"?u.replies[0].addSheet:u};var an;(function(e){e.Extract="Extract",e.Crawl="Crawl",e.Infer="Infer"})(an||(an={}));var He;(function(e){e.COLUMNS="columns",e.NEWTAB="new_tab",e.CONTEXT="context_only"})(He||(He={}));var cn;(function(e){e.ROWBYROW="row_by_row",e.ALLATONCE="all_at_once"})(cn||(cn={}));var un;(function(e){e.AUTO="auto",e.REUSE_SINGLE_TAB="reuse_single_tab",e.REUSE_BY_URL="reuse_by_url",e.NEVER="never"})(un||(un={}));var ln;(function(e){e.Code="Code",e.Cron="Cron",e.Graph="Graph",e.PDFFill="PDFFill",e.ToolGenerate="ToolGenerate",e.WebPageGenerate="WebPageGenerate",e.GoogleDocGenerate="GoogleDocGenerate",e.GoogleSlidesGenerate="GoogleSlidesGenerate",e.ProcessText="ProcessText",e.CreateSheetFromData="CreateSheetFromData",e.QueryRtrvrAIDocs="QueryRtrvrAIDocs",e.EnhancePrompt="EnhancePrompt"})(ln||(ln={}));var dn;(function(e){e.FLASH_LITE="Gemini Flash Lite",e.FLASH="Gemini Flash",e.PRO="Gemini Pro"})(dn||(dn={}));var Q;(function(e){e.enhance="enhance",e.plan="plan",e.actOnTabs="actOnTabs",e.extract="extract",e.infer="infer",e.processTabWorkflows="processTabWorkflows",e.processText="processText",e.createSheetFromData="createSheetFromData",e.queryRtrvrDocs="queryRtrvrDocs",e.googleDocGenerator="googleDocGenerator",e.googleSlidesGenerator="googleSlidesGenerator",e.webpageGenerator="webpageGenerator",e.pdfFiller="pdfFiller",e.customToolGenerator="customToolGenerator",e.getPageData="getPageData",e.roverExternalPageData="roverExternalPageData"})(Q||(Q={}));var qe={plannerHistory:16,prevSteps:8,uiMessages:40,timelineEvents:60,localPersistBytes:131072,snapshotBytes:262144};var W;(function(e){e.click_element="click_element",e.type_into_element="type_into_element",e.type_and_enter="type_and_enter",e.select_dropdown_value="select_dropdown_value",e.clear_element="clear_element",e.focus_element="focus_element",e.check_field_validity="check_field_validity",e.select_text="select_text",e.hover_element="hover_element",e.right_click_element="right_click_element",e.double_click_element="double_click_element",e.press_key="press_key",e.mouse_wheel="mouse_wheel",e.dispatch_pointer_path="dispatch_pointer_path",e.drag_element="drag_element",e.drag_and_drop="drag_and_drop",e.adjust_slider="adjust_slider",e.scroll_page="scroll_page",e.scroll_to_element="scroll_to_element",e.swipe_element="swipe_element",e.long_press_element="long_press_element",e.pinch_zoom="pinch_zoom",e.go_back="go_back",e.go_forward="go_forward",e.goto_url="goto_url",e.refresh_page="refresh_page",e.open_new_tab="open_new_tab",e.switch_tab="switch_tab",e.close_tab="close_tab",e.describe_images="describe_images",e.google_search="google_search",e.network_run_recipe="network_run_recipe",e.rover_external_read_context="rover_external_read_context",e.rover_external_act_context="rover_external_act_context",e.copy_text="copy_text",e.paste_text="paste_text",e.wait_action="wait_action",e.wait_for_element="wait_for_element",e.answer_task="answer_task",e.upload_file="upload_file",e.solve_captcha="solve_captcha"})(W||(W={}));var tt=new Set(Object.values(W));var Cr=new Set([W.goto_url,W.google_search,W.go_back,W.go_forward,W.refresh_page,W.open_new_tab,W.switch_tab,W.close_tab]),kr=new Set([W.scroll_page,W.scroll_to_element,W.mouse_wheel,W.swipe_element,W.pinch_zoom,W.dispatch_pointer_path,W.hover_element,W.focus_element]),fn=600,Or=new Set(["same_tab_scheduled","same_host_navigated","subdomain_navigated","new_tab_opened","blocked","switch_tab"]);function nt(e){if(e?.())throw new DOMException("Run cancelled","AbortError")}async function pn({calls:e,bridgeRpc:t,isCancelled:n}){let r=[],o=!1,s=!1,a,c,i;for(let l of e){nt(n);let d=l.name,f=l.args||{};if(s){let I={name:d||"unknown",args:f,response:{status:"Failure",error:`Tool '${d}' skipped because navigation tool '${a}' already ran. Re-plan using new page state.`,output:void 0,allowFallback:!0}};r.push(I);continue}let h;try{nt(n),h=await t("executeTool",{call:l})}catch(I){nt(n),h={success:!1,error:I?.message||String(I),allowFallback:!0}}let y={status:h?.success?"Success":"Failure",error:h?.error,output:h?.output,allowFallback:h?.allowFallback},v={name:d||"unknown",args:f,response:y};if(r.push(v),h?.success){let I=h?.output&&typeof h.output=="object"?h.output:void 0,C=String(I?.navigationOutcome||"").trim().toLowerCase(),F=Or.has(C)?C:void 0,R=I?.navigationPending===!0,P=I?.openedInNewTab===!0,b=!!F||R||P;if(Cr.has(d)||b){s=!0,a=d,o=!1,F?c=F:P?c="new_tab_opened":d===W.switch_tab?c="switch_tab":d===W.open_new_tab?c="new_tab_opened":c="same_tab_scheduled";let k=Number(I?.logicalTabId??I?.logical_tab_id??I?.tabId??I?.tab_id??f?.logical_tab_id??f?.tab_id);Number.isFinite(k)&&k>0&&(i=k)}else kr.has(d)&&(o=!0)}fn>0&&(await new Promise(I=>setTimeout(I,fn)),nt(n))}return{results:r,disableAutoScroll:o&&!s,navigationOccurred:s,navigationTool:a,navigationOutcome:c,logicalTabId:i}}var Dr={open_url_new_tab:"open_new_tab"};async function ot(e){if(e)for(;e.current.state==="paused";)await new Promise(t=>setTimeout(t,100))}function st(e){return e.isCancelled?{state:"cancel_requested",reason:e.reason||"worker_cancelled"}:{state:"continue"}}async function at({request:e,response:t,tabId:n,prevSteps:r,thought:o,bridgeRpc:s,isCancelled:a,userFunctionDeclarations:c,onStatusUpdate:i,onPrevStepsUpdate:u}){let l=()=>{if(a?.())throw new DOMException("Run cancelled","AbortError")};l();let{functionCalls:d,modelParts:f,data:h,accTreeId:y}=t||{},v=xt(f),I=!1;if(h&&Array.isArray(h)&&h.length>0)return r.push({accTreeId:y,thought:o,modelParts:f,data:JSON.stringify(h)}),be(r),u?.(r),i?.("Data extracted successfully",o,"verify"),{needsRetry:!1,data:h};if(Array.isArray(d)&&d.length>0){let C=d.find(b=>String(b?.name||"").trim().toLowerCase()==="ask_user");if(C){let b=d.filter(M=>M&&M!==C&&typeof M.name=="string"&&M.name.trim()).map(M=>({name:String(M.name||"unknown"),args:M.args||{},response:{status:"Failure",error:"Skipped because ask_user was called. Wait for user answers before executing other tools.",allowFallback:!0,output:{status:"deferred_after_ask_user"}}})),k=Pr(C?.args?.questions_to_ask);return k.length?(r.push({accTreeId:y,thought:o,modelParts:f,functions:[{name:"ask_user",args:{questions_to_ask:k.map(M=>({key:M.key,query:M.query,...M.required===!1?{required:!1}:{}}))},response:{status:"Success",output:{status:"waiting_input",needsUserInput:!0,questions:k}}},...b]}),be(r),u?.(r),i?.("Need user clarification to continue",o,"verify"),{needsRetry:!1,needsUserInput:!0,questions:k}):(r.push({accTreeId:y,thought:o,modelParts:f,fail:"ask_user called with invalid or empty 'questions_to_ask'",functions:[{name:"ask_user",args:C?.args||{},response:{status:"Failure",error:"Missing/invalid 'questions_to_ask'",allowFallback:!1}},...b]}),be(r),u?.(r),{needsRetry:!0})}let F=[],R=[],P=[];for(let b=0;b<d.length;b++){let k=d[b],M=String(k?.name||""),$=Dr[M];if($){F.push({...k,name:$}),P.push(b);continue}k?.name&&tt.has(k.name)?(F.push(k),P.push(b)):R.push(k)}if(R.length>0){if(l(),c?.length){for(let b of R)if(!c.find(M=>M.name===b.name))return r.push({accTreeId:y,thought:o,modelParts:f,fail:`Invalid tool name "${b.name}"`,functions:R.map(M=>({name:M.name||"unknown",args:M.args||{},response:{status:"Failure",error:"Invalid tool"}}))}),be(r),u?.(r),{needsRetry:!0}}return i?.(`Requesting external functions: ${R.map(b=>b.name).join(", ")}`,o,"execute"),be(r),u?.(r),{needsRetry:!1,functionCalls:R}}if(F.length>0){l(),i?.(`Executing browser actions: ${F.map(p=>p.name).join(", ")}`,o,"execute"),r.push({accTreeId:y,thought:o,modelParts:f,functions:F.map((p,m)=>{let T=v[P[m]];return{name:p.name||"unknown",args:T?rt({...p.args||{}},T):p.args||{},response:{status:"Pending execution"}}})}),be(r),u?.(r);let b=r.length-1,{results:k,disableAutoScroll:M,navigationOccurred:$,navigationTool:x,navigationOutcome:L,logicalTabId:E}=await pn({calls:F,bridgeRpc:s,isCancelled:a});if(I=M,l(),b>=0&&b<r.length){r[b].functions=k.map((m,T)=>{let g=v[P[T]];return g?{...m,args:rt({...m.args},g)}:m});let p=k.filter(m=>m.response.status==="Failure").length;p>0&&(r[b].fail=`${p} tool(s) failed.`)}if(L==="blocked"){let p=k.find(g=>g.response?.output&&typeof g.response.output=="object"&&g.response.output.navigationOutcome==="blocked")?.response?.output,m=p&&typeof p=="object"?String(p.blockedDomain||""):"",T=p&&typeof p=="object"?String(p.agentInstruction||""):"";r.push({thought:`[System] Navigation was blocked${m?` to ${m}`:""}. ${T||"Acknowledge to user and proceed with next step."}`,functions:[{name:"_system_observation",args:{type:"navigation_blocked",blockedDomain:m},response:{status:"Success",output:{observation:"navigation_blocked",blockedDomain:m,instruction:T}}}]})}return be(r),u?.(r),{needsRetry:!1,disableAutoScroll:I,navigationOccurred:$,navigationTool:x,navigationOutcome:L,logicalTabId:E}}}return r.push({accTreeId:y,thought:o,modelParts:f,fail:"Empty or unusable response"}),be(r),u?.(r),{needsRetry:!0}}function Pr(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e){if(!r||typeof r!="object")continue;let o=String(r.key||"").trim(),s=Mr(r);if(!o||!s||n.has(o))continue;n.add(o);let a=typeof r.required=="boolean",c=typeof r.optional=="boolean",i=a?!!r.required:c?!r.optional:!0;t.push({key:o,query:s,...typeof r.question=="string"&&r.question.trim()?{question:String(r.question).trim()}:{},...typeof r.id=="string"&&r.id.trim()?{id:String(r.id).trim()}:{},...Array.isArray(r.choices)?{choices:r.choices}:{},required:i})}return t.slice(0,6)}function Mr(e){if(!e||typeof e!="object")return"";let t=String(e.query||e.question||"").trim();return t||""}function be(e){if(e.length<=It)return;let t=It-1,n=e[0],r=e.slice(-t);e.length=0,e.push(n,...r)}function it(e,t=3){if(t<1||e.length===0)return;let n=-1;for(let s=0;s<e.length;s++)if(e[s].accTreeId!==void 0){n=s;break}if(n===-1)return;let r=Math.max(0,t-1),o=0;for(let s=e.length-1;s>=0;s--)if(e[s].accTreeId!==void 0){if(s===n)continue;o<r?o++:delete e[s].accTreeId}}var gn=["tab_id","source_tab_id","source_tab_ids"];function xt(e){return Array.isArray(e)?e.filter(t=>t?.functionCall).map(t=>t.functionCall.args||{}):[]}function rt(e,t){for(let n of gn)n in t&&(e[n]=t[n]);if(delete e._tab_id_mapping_error,Array.isArray(e.tool_calls)&&Array.isArray(t.tool_calls))for(let n=0;n<e.tool_calls.length&&n<t.tool_calls.length;n++){let r=e.tool_calls[n]?.tool_args,o=t.tool_calls[n]?.tool_args;if(!(!r||!o)){for(let s of gn)s in o&&(r[s]=o[s]);delete r._tab_id_mapping_error}}return e}function mn(e,t){let n=[];for(let r of t){let o=r.name||"unknown",s=r.callId??o,a=e[s]??e[o];n.push({functions:[{name:o,args:r.args||{},response:{status:a?.success?"Success":"Failure",error:a?.error?.message||a?.error,output:a?.result}}]})}return n}function ye(e){let t=new Set,n=[];for(let r of e){let o=Number(r);!Number.isFinite(o)||o<=0||t.has(o)||(t.add(o),n.push(o))}return n}function hn(e,t){return e==="external_scraped"||e==="external_placeholder"||e==="live_dom"?e:t?"external_placeholder":"live_dom"}function Nr(e){return e.map(t=>({id:Number(t?.id),url:typeof t?.url=="string"?t.url:void 0,title:typeof t?.title=="string"?t.title:void 0,external:!!t?.external,accessMode:hn(t?.accessMode,!!t?.external),inaccessibleReason:typeof t?.inaccessibleReason=="string"?t.inaccessibleReason:void 0})).filter(t=>Number.isFinite(t.id)&&t.id>0)}function Ur(e){return Array.isArray(e)?e.map(t=>{let n=Number(t?.logicalTabId||t?.id);if(!Number.isFinite(n)||n<=0)return;let r=!!t?.external;return{id:n,runtimeId:typeof t?.runtimeId=="string"?t.runtimeId:void 0,url:typeof t?.url=="string"?t.url:void 0,title:typeof t?.title=="string"?t.title:void 0,external:r,accessMode:hn(t?.accessMode,r),inaccessibleReason:typeof t?.inaccessibleReason=="string"?t.inaccessibleReason:void 0,updatedAt:Number(t?.updatedAt)||0}}).filter(t=>!!t):[]}function At(e,t,n){let r=ye(e);if(!r.length)return[];let s=r.includes(t)?t:r[0];return[s,...r.filter(c=>c!==s)].slice(0,n)}function Lr(e,t){if(!t.length)return ye(e);let n=new Set(t);return ye(e).filter(r=>n.has(r))}async function le(e,t,n){let r=Math.max(1,Number(n?.maxContextTabs)||8),o=Math.max(5e3,Number(n?.detachedExternalTabMaxAgeMs)||9e4),s=Math.max(1e4,Number(n?.staleRuntimeTabMaxAgeMs)||45e3),a=ye(n?.scopedTabIds||[]),c=a.length>0,i=[...a],u=new Set(i),l=Nr(t),d=ye((a.length>0?l.filter(x=>a.includes(x.id)):l).map(x=>x.id)),f=[...d],h=[],y=[],v=x=>c?u.has(x):!0;if(e)try{let x=await e("listSessionTabs");h=Ur(Array.isArray(x)?x:[]),y=ye(h.map(L=>L.id)),y.length>0?f=c?Lr(y,i):y:c&&(f=[...i])}catch{}c&&(f=ye(f).filter(x=>v(x)),!f.length&&i.length&&(f=[...i]));let I=Number(n?.seedTabId)>0?Number(n?.seedTabId):f[0]||d[0]||1;if(e)try{let x=await e("getTabContext"),L=Number(x?.activeLogicalTabId||x?.logicalTabId||x?.id);Number.isFinite(L)&&L>0&&v(L)&&(I=L)}catch{}c&&!v(I)&&i.length>0&&(I=i[0]);let C=Date.now(),F=new Map;for(let x of h)F.set(x.id,x);let R=h.filter(x=>!!x.runtimeId&&C-(x.updatedAt||0)<=s).map(x=>x.id);if(R.length>0&&!R.includes(I)){let x=[...R].sort((L,E)=>Number(F.get(E)?.updatedAt||0)-Number(F.get(L)?.updatedAt||0))[0];Number.isFinite(x)&&x>0&&v(x)&&(I=x)}f.length?f.includes(I)||(c?f=i.length>0?[...i]:f:h.length>0?I=f[0]:f=[I,...f]):f=c?i.length>0?[...i]:[I]:[I];let P=c?[...i]:h.length>0?ye(h.map(x=>x.id)):[...f],b=P.filter(x=>{if(x===I)return!0;let L=F.get(x);return L?L.runtimeId?C-(L.updatedAt||0)<=s:L.external?C-(L.updatedAt||0)<=o:C-(L.updatedAt||0)<=s:c}),k=c?At(i,I,r):[...new Set(b.length?b:P.length?P:f)];c||(k.includes(I)?k=[I,...k.filter(x=>x!==I)]:k=[I,...k],k=k.slice(0,r)),k.length||(k=c?i.length>0?At(i,I||i[0],r):[I||1]:[I||1]);let M={};for(let x of l)M[x.id]=x;for(let x of h)M[x.id]={...M[x.id]||{},...x};for(let x of i)M[x]||(M[x]={id:x,accessMode:"live_dom",inaccessibleReason:"detached_runtime_placeholder"});for(let x of k)M[x]||(M[x]={id:x,accessMode:"live_dom",inaccessibleReason:"detached_runtime_placeholder"});let $={hasExplicitScope:c,scopedTabIdsInput:a,listedTabIds:y,keptScopedTabIds:i,resolvedTabOrder:k};if(c){i.length&&!u.has(I)&&(I=i[0]),k=At(i,I,r);let x={};for(let L of i)x[L]=M[L]||{id:L};return n?.onDiagnostics?.({...$,resolvedTabOrder:k}),{tabOrder:k,activeTabId:I,tabMetaById:x}}return n?.onDiagnostics?.($),{tabOrder:k,activeTabId:I,tabMetaById:M}}function _n(e,t){let n=String(t||"").trim();return n||String(e||"").trim()}var Tn=3;function vt(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let o=Number(r);!Number.isFinite(o)||o<=0||t.has(o)||(t.add(o),n.push(o))}return n}async function bn(e){let{tabOrder:t,scopedTabIds:n,seedTabId:r,onScopedTabIdsTouched:o,userInput:s,schema:a,previousSteps:c=[],plannerPrevSteps:i=[],files:u=[],chatLog:l=[],recordingContext:d,trajectoryId:f,onStatusUpdate:h,functionDeclarations:y,bridgeRpc:v,ctx:I,onPrevStepsUpdate:C}=e,F=_n(s,I.rootUserInput);if(!t?.length)return{error:"No tabs available for processing",warnings:["No active tab found"]};let R=0,P=[],b=Array.isArray(c)?c:[],k=t.map(E=>({id:E})),M=vt(n||[]);Number(r)>0&&!M.includes(Number(r))&&M.unshift(Number(r));let $=E=>{let p=vt(E);if(!p.length)return;let m=vt([...M,...p]);m.length===M.length&&m.every((T,g)=>T===M[g])||(M=m,o?.(m))},x=0,L;for(;x<Tn;){if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};try{if(await ot(void 0),I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};h?.("Analyzing page content...","Calling seek workflow","analyze");let{tabOrder:E,activeTabId:p}=await le(v,k,{scopedTabIds:M,seedTabId:r});if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};let m=E.length?E:t,T={};try{T[p]=await I.getPageData(p,{...L||{},__roverAllowExternalFetch:!0,__roverExternalIntent:"auto",__roverExternalMessage:F||s})}catch{x++;continue}let g=m.filter(O=>O!==p),_=await Promise.all(g.map(async O=>{try{let U=await I.getPageData(O);return{tabId:O,pageData:U}}catch{return{tabId:O,pageData:void 0}}}));if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};for(let O of _)O.pageData?T[O.tabId]=O.pageData:P.push(`Could not load page data for tab ${O.tabId}; continuing with remaining tabs.`);if(!T[p]){x++;continue}let A={siteId:I.siteId,customTabWorkflow:"Seek",webPageMap:T,tabOrder:m,activeTabId:p,userInput:F||s,dataJsonSchema:a,files:u,recordingContext:d,agentLog:{prevSteps:b,chatLog:l},plannerPrevSteps:i,llmIntegration:I.llmIntegration,apiMode:I.apiMode,apiToolsConfig:I.apiToolsConfig,functionDeclarations:y,authToken:void 0,timestamp:I.userTimestamp,trajectoryId:f,userProfile:I.userProfile,stop:st({isCancelled:!!I.isCancelled?.()})},w=await I.callExtensionRouter(Q.processTabWorkflows,A);if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};if(!w?.success)return{error:w?.error||"Failed to process tab workflows",errorDetails:w?.errorDetails||void 0,creditsUsed:R};let D=w.data;R+=D?.creditsUsed||0;let S=D?.tabResponses?.[p];if(!S){x++;continue}if(S?.warnings?.length&&P.push(...S.warnings),S?.stopState&&S.stopState!=="continue")return{error:String(S.stopReason||S.error||"").trim()||`Execution stopped (${S.stopState})`,prevSteps:b,creditsUsed:R,warnings:P};if(S?.error){x++;continue}let G=await at({request:A,response:S,tabId:p,prevSteps:b,thought:S.thought,bridgeRpc:v,isCancelled:I.isCancelled,userFunctionDeclarations:y,onStatusUpdate:h,onPrevStepsUpdate:C});if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};if(G.needsRetry){L=G.disableAutoScroll?{disableAutoScroll:!0}:void 0,x++;continue}if(G.navigationOccurred){let O=G.navigationOutcome,U=Number(G.logicalTabId);if(Number.isFinite(U)&&U>0&&$([U]),(O==="new_tab_opened"||O==="switch_tab")&&Number.isFinite(U)&&U>0)try{await v("executeTool",{call:{name:"switch_tab",args:{logical_tab_id:U,tab_id:U}},payload:{reason:"act_loop_navigation_continue"}})}catch{}L=G.disableAutoScroll?{disableAutoScroll:!0}:void 0;continue}if(G.data)return it(b),C?.(b),{data:G.data,prevSteps:b,creditsUsed:R,warnings:P};if(G.needsUserInput&&Array.isArray(G.questions)&&G.questions.length>0)return it(b),C?.(b),{prevSteps:b,creditsUsed:R,warnings:P,needsUserInput:!0,questions:G.questions};if(G.functionCalls?.length){let O=G.functionCalls.map((H,q)=>({...H,callId:`${H.name||"fn"}:${q}`})),U={};for(let H of O){if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};try{let q=await v("executeClientTool",{name:H.name,args:H.args});if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};U[H.callId]={success:!0,result:q}}catch(q){if(I.isCancelled?.())return{error:"Run cancelled",prevSteps:b,creditsUsed:R};U[H.callId]={success:!1,error:{message:q?.message||String(q)}}}}b.push(...mn(U,O)),it(b),C?.(b)}L=G.disableAutoScroll?{disableAutoScroll:!0}:void 0}catch(E){if(E?.name==="AbortError")return{error:"Run cancelled",prevSteps:b,creditsUsed:R};if(x++,x>=Tn)return{error:E?.message||"Agentic seek failed",errorDetails:E?.roverError||void 0,prevSteps:b,creditsUsed:R};await new Promise(p=>setTimeout(p,500*x))}}return{error:"Max retries reached",prevSteps:b,creditsUsed:R,warnings:P}}var Fr=3;function Ct(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let o=Number(r);!Number.isFinite(o)||o<=0||t.has(o)||(t.add(o),n.push(o))}return n}async function ct(e){let{tabOrder:t,scopedTabIds:n,seedTabId:r,onScopedTabIdsTouched:o,userInput:s,schema:a,outputDestination:c,trajectoryId:i,recordingContext:u,plannerPrevSteps:l=[],files:d=[],onStatusUpdate:f,schemaHeaderSheetInfo:h,returnDataOnly:y,previousSteps:v=[],bridgeRpc:I,ctx:C,onPrevStepsUpdate:F}=e;if(!t?.length)return{error:"No tabs available for extraction",warnings:["No active tab found"]};let R=0,P=[],b=t.map(L=>({id:L})),k=Ct(n||[]);Number(r)>0&&!k.includes(Number(r))&&k.unshift(Number(r));let M=L=>{let E=Ct(L);if(!E.length)return;let p=Ct([...k,...E]);p.length===k.length&&p.every((m,T)=>m===k[T])||(k=p,o?.(p))},$=Array.isArray(v)?v:[],x;for(let L=0;L<Fr;L++){if(await ot(void 0),C.isCancelled?.())return{error:"Run cancelled",prevSteps:$,creditsUsed:R,warnings:P};let{activeTabId:E}=await le(I,b,{scopedTabIds:k,seedTabId:r});if(C.isCancelled?.())return{error:"Run cancelled",prevSteps:$,creditsUsed:R,warnings:P};let p=E,m;try{m=await C.getPageData(p,x)}catch{P.push(`Could not load page data for tab ${p}; retrying.`);continue}let T={siteId:C.siteId,userInput:s,schema:a,outputDestination:c,schemaHeaderSheetInfo:h,webPageMap:{[E]:m},tabOrder:[E],plannerPrevSteps:l,llmIntegration:C.llmIntegration,apiMode:C.apiMode,apiToolsConfig:C.apiToolsConfig,authToken:void 0,timestamp:C.userTimestamp,trajectoryId:i,userProfile:C.userProfile,recordingContext:u,files:d,returnDataOnly:y,stop:st({isCancelled:!!C.isCancelled?.()})};f?.("Extracting data...","Calling extract sub-agent","execute");let g=await C.callExtensionRouter(Q.extract,T);if(C.isCancelled?.())return{error:"Run cancelled",prevSteps:$,creditsUsed:R,warnings:P};if(!g?.success)return{error:g?.error||"Extract request failed",creditsUsed:R};let _=g.data;if(R+=_?.creditsUsed||0,_?.warnings?.length&&P.push(..._.warnings),_?.data&&Array.isArray(_.data))return{data:_.data,schemaHeaderSheetInfo:_.schemaHeaderSheetInfo,prevSteps:$,creditsUsed:R,warnings:P};let A=_?.tabResponses?.[E];if(A){if(A?.stopState&&A.stopState!=="continue")return{error:String(A.stopReason||A.error||"").trim()||`Execution stopped (${A.stopState})`,prevSteps:$,creditsUsed:R,warnings:P};let w=await at({request:T,response:A,tabId:E,prevSteps:$,thought:A.thought,bridgeRpc:I,isCancelled:C.isCancelled,onPrevStepsUpdate:F});if(C.isCancelled?.())return{error:"Run cancelled",prevSteps:$,creditsUsed:R,warnings:P};if(w.needsRetry){x=w.disableAutoScroll?{disableAutoScroll:!0}:void 0;continue}if(w.navigationOccurred){let D=Number(w.logicalTabId);Number.isFinite(D)&&D>0&&M([D])}if(x=w.disableAutoScroll?{disableAutoScroll:!0}:void 0,w.data)return{data:w.data,schemaHeaderSheetInfo:_.schemaHeaderSheetInfo,prevSteps:$,creditsUsed:R,warnings:P};if(w.functionCalls?.length)for(let D of w.functionCalls){if(C.isCancelled?.())return{error:"Run cancelled",prevSteps:$,creditsUsed:R,warnings:P};try{if(await I("executeClientTool",{name:D.name,args:D.args}),C.isCancelled?.())return{error:"Run cancelled",prevSteps:$,creditsUsed:R,warnings:P}}catch{if(C.isCancelled?.())return{error:"Run cancelled",prevSteps:$,creditsUsed:R,warnings:P}}}}}return{error:"Extract failed after retries",prevSteps:$,creditsUsed:R,warnings:P}}async function yn(e){let t=await ct({tabOrder:e.tabOrder,userInput:e.userInput,schema:e.schema,trajectoryId:e.trajectoryId,recordingContext:e.recordingContext,plannerPrevSteps:e.plannerPrevSteps,previousSteps:e.previousSteps,files:e.files,onStatusUpdate:e.onStatusUpdate,returnDataOnly:e.returnDataOnly,bridgeRpc:e.bridgeRpc,ctx:e.ctx,onPrevStepsUpdate:e.onPrevStepsUpdate}),n=t.warnings?[...t.warnings]:[];return n.push("Crawl workflow is limited in embed context; processed current page only."),{data:t.data,schemaHeaderSheetInfo:t.schemaHeaderSheetInfo,prevSteps:t.prevSteps,error:t.error,warnings:n,creditsUsed:t.creditsUsed}}var Gr=/history\.step\[\s*(\d+)\s*\]\.sheet\[\s*(\d+)\s*\](?:\.tab\[(.*?)\])?/i;function je(e,t){if(!e||!t?.length)return;let n=e.match(Gr);if(!n)return;let r=parseInt(n[1],10),o=parseInt(n[2],10),s=n[3];if(!r||r<1||r>t.length)return;let a=t[r-1],c=a?.schemaHeaderSheetInfo?.[o]?.sheetInfo||a?.schemaHeaderSheetInfo?.[0]?.sheetInfo;if(!c)return;let i={...c};if(s){let u=s.trim();if(/^['"].*['"]$/.test(u)){let l=u.slice(1,-1),d=c.sheetTabs?.find(f=>String(f.title).toLowerCase()===l.toLowerCase());d&&(i.sheetTab=d.title,i.sheetTabId=d.id)}else{let l=parseInt(u,10);if(!Number.isNaN(l)){let d=c.sheetTabs?.[l]||c.sheetTabs?.[l-1];d&&(i.sheetTab=d.title,i.sheetTabId=d.id)}}}return i}function Ae(e,t){let n=e||{},r=n.existing_sheet_from_history||n.existingSheetFromHistory||n.existing_sheet_id||n.existingSheetId,o;typeof r=="string"?(o=je(r,t),!o&&r.trim()&&(o={sheetId:r.trim(),sheetTab:n.existingTabTitle||n.existing_tab_title||"Data"})):r&&typeof r=="object"&&(o=r);let s=n.new_sheet_title||n.newSheetTitle,a=n.new_tab_title||n.newTabTitle,c=n.existing_tab_title||n.existingTabTitle;return o?.sheetId&&ge(o.sheetId)?{sheetId:o.sheetId,sheetTitle:o.sheetTitle||s,tabTitle:c||o.sheetTab||a||"Data",mergeHeaders:!0}:{sheetId:void 0,sheetTitle:s,tabTitle:a||c,mergeHeaders:!1}}function We(e,t){if(e?.properties&&typeof e.properties=="object")return Object.keys(e.properties);let n=new Set;if(Array.isArray(t))for(let r of t)r&&typeof r=="object"&&!Array.isArray(r)&&Object.keys(r).forEach(o=>n.add(o));return n.size?[...n]:[]}function $r(e,t){return t.map(n=>e.map(r=>n?.[r]??""))}function ut(e){let{store:t,target:n,headers:r,objects:o,schema:s}=e,a=t.getOrCreateSheet(n.sheetId,n.sheetTitle),c=n.tabTitle||"Data",i=t.ensureTab(a.id,c,{createIfMissing:!0});i.headerRow.length&&n.mergeHeaders?t.mergeHeaderRow(a.id,i.index,r):t.setHeaderRow(a.id,i.index,r),s&&t.setSchema(a.id,i.index,s,{preserveHeader:!0});let u=t.getTab(a.id,i.index).headerRow,l=$r(u,o);return t.appendRows(a.id,i.index,l,{alignToHeader:!0}),{sheetInfo:t.toSheetInfo(a.id,i.index),headerRow:u}}function Sn(e){let{store:t,target:n,headers:r,rows:o,schema:s}=e,a=t.getOrCreateSheet(n.sheetId,n.sheetTitle),c=n.tabTitle||"Data",i=t.ensureTab(a.id,c,{createIfMissing:!0});return i.headerRow.length&&n.mergeHeaders?t.mergeHeaderRow(a.id,i.index,r):t.setHeaderRow(a.id,i.index,r),s&&t.setSchema(a.id,i.index,s,{preserveHeader:!0}),t.appendRows(a.id,i.index,o,{alignToHeader:!0}),{sheetInfo:t.toSheetInfo(a.id,i.index),headerRow:t.getTab(a.id,i.index).headerRow}}function Se(e,t){let n=t.sheetTabId??0,r=e.toAny2D(t.sheetId,n,!0);return{...t,sheetData:r,kind:"memory"}}async function wn(e){let{workflow:t,userInput:n,trajectoryId:r,plannerPrevSteps:o,agentLog:s,files:a,onStatusUpdate:c,ctx:i,bridgeRpc:u,driveAuthToken:l}=e,d=()=>{if(i.isCancelled?.())throw new DOMException("Run cancelled","AbortError")};try{d();let f=t.sourceSheetFromHistory?je(t.sourceSheetFromHistory,o):void 0,h=f?.sheetId||t.sheetId,y=f?.sheetTab||t.sheetTabTitle,v=f?.sheetTabId||t.sheetTabId;if(!h)return{error:"sheets_workflow requires sheetId in workflow."};let I=i.apiMode||!l||ge(h),C=async()=>l||"",F=[],R=[];if(I){let g=i.tabularStore,_=v!==void 0?g.getTabByIndex(h,v):y?g.getTabByTitle(h,y):g.getTab(h,0);if(!_)return{error:"Memory sheet tab not found for workflow."};y=_.title,v=_.index,F=g.toAny2D(h,_.index,!0),R=g.listTabs(h).map(A=>({id:A.index,title:A.title}))}else{if(R=(await on(h,C)).sheetTabs,!y&&typeof v=="number"&&(y=R.find(_=>_.id===v)?.title),y||(y=R[0]?.title),!y)return{error:"Could not resolve sheet tab title for workflow."};d(),c?.("Loading sheet rows...",y,"analyze"),F=await sn(h,y,C)||[]}if(!F.length)return{error:"Sheet is empty or inaccessible."};let P=F.map(g=>(g||[]).map(_=>qr(_))),b=t.isFirstRowHeader?P[0]:null,k=t.isFirstRowHeader?P.slice(1):P.slice(),M=b&&b.length?b:jr(P),$=zr(t,M),x=Kr(t,M),L=Math.max(0,(t.startRowIndex??1)-1-(t.isFirstRowHeader?1:0)),E=t.endRowIndex?Math.min(k.length,t.endRowIndex-(t.isFirstRowHeader?1:0)):k.length,p=[],m=[],T={};for(let g=L;g<E;g++){d();let _=k[g]||[],A=Wr(M,_),w=Br(M,_,x),D={input_value:_[$]??"",row_number:g+1+(t.isFirstRowHeader?1:0),row_data:A,context:w},S={},G=[];for(let O of t.workflowSteps){d();let U=O.stepName||O.tool,H=kt(O.userInputTemplate||n,D,S);if(O.tabManagement?.urlTemplate){let De=kt(O.tabManagement.urlTemplate,D,S);De&&(d(),await u("executeTool",{call:{name:"goto_url",args:{tab_id:0,url:De}}}))}let q=O.toolArgs?Ot(O.toolArgs,D,S):void 0,K=await Hr({step:O,userInput:H,trajectoryId:r,plannerPrevSteps:o,agentLog:s,files:a,onStatusUpdate:c,ctx:i,bridgeRpc:u,driveAuthToken:l,toolArgs:q});if(S[U]=K,d(),O.outputMapping===He.CONTEXT)continue;if(O.outputMapping===He.NEWTAB){T[U]||(T[U]=[]),T[U].push(Vr(K));continue}let Te=U||O.tool;p.includes(Te)||p.push(Te),G.push(Be(K))}m.push(G)}if(I){d();let g=i.tabularStore,_=v!==void 0?g.getTab(h,v):g.getTabByTitle(h,y)||g.getTab(h,0);if(p.length){g.mergeHeaderRow(h,_.index,p);for(let D=0;D<m.length;D++){let S=L+D,G={};p.forEach((O,U)=>{G[O]=m[D]?.[U]??""}),g.upsertColumnsByHeader(h,_.index,S,G)}}for(let[D,S]of Object.entries(T)){let G=In(D),O=En(S);g.publishNewTab(h,G,O,S,{})}let A=Se(g,g.toSheetInfo(h,_.index)),w=g.getTab(h,_.index).headerRow;return{output:{sheetId:h,sheetTabTitle:y,rowsProcessed:Math.max(0,E-L),outputColumns:p,newTabs:Object.keys(T)},schemaHeaderSheetInfo:[{headingInfo:{schema:{},headings:w,title:y},sheetInfo:A,headerRow:w}]}}p.length&&(d(),await Xr({sheetId:h,sheetTabTitle:y,header:M,outputHeaders:p,outputRows:m,startRowIndex:t.isFirstRowHeader?2:1,getAuthToken:C}));for(let[g,_]of Object.entries(T)){d();let A=In(g),w=await Yr(h,A,C),D=En(_);await Qr({sheetId:h,sheetTabTitle:w,values:[D,..._],getAuthToken:C})}return{output:{sheetId:h,sheetTabTitle:y,rowsProcessed:Math.max(0,E-L),outputColumns:p,newTabs:Object.keys(T)},schemaHeaderSheetInfo:[{headingInfo:{schema:{},headings:[...M,...p],title:y},sheetInfo:{sheetId:h,sheetTab:y,sheetTabId:v,sheetTabs:R},headerRow:[...M,...p]}]}}catch(f){return{error:f?.message||String(f)}}}async function Hr({step:e,userInput:t,trajectoryId:n,plannerPrevSteps:r,agentLog:o,files:s,onStatusUpdate:a,ctx:c,bridgeRpc:i,driveAuthToken:u,toolArgs:l}){if(c.isCancelled?.())throw new DOMException("Run cancelled","AbortError");let d=e.tool;if(d===N.PROCESS_TEXT){let f=await Ie({toolName:d,toolArgs:{textInputs:e.textInputs||[],taskInstruction:e.taskInstruction||t,schema:e.schema},userInput:t,tabs:[{id:1}],trajectoryId:n,plannerPrevSteps:r,agentLog:o,files:s,onStatusUpdate:a,ctx:c,bridgeRpc:i,driveAuthToken:u});return o&&Array.isArray(f.prevSteps)&&f.prevSteps.length>0&&(o.prevSteps=f.prevSteps),f.output??f}if(d===N.ACT||d===N.EXTRACT||d===N.CRAWL){let f=await Ie({toolName:d,toolArgs:{user_input:t,schema:e.schema,followLinks:e.followLinks,maxPages:e.maxPages},userInput:t,tabs:[{id:1}],trajectoryId:n,plannerPrevSteps:r,agentLog:o,files:s,onStatusUpdate:a,ctx:c,bridgeRpc:i,driveAuthToken:u});return o&&Array.isArray(f.prevSteps)&&f.prevSteps.length>0&&(o.prevSteps=f.prevSteps),f.output??f}if(l||e.toolArgs||typeof d=="string"){if(c.isCancelled?.())throw new DOMException("Run cancelled","AbortError");let f=await i("executeClientTool",{name:d,args:l||e.toolArgs||{}});if(c.isCancelled?.())throw new DOMException("Run cancelled","AbortError");return f}return{error:`Unsupported step tool: ${d}`}}function qr(e){return e&&typeof e=="object"&&"v"in e?e.v:e??""}function jr(e){let t=e.reduce((r,o)=>Math.max(r,o.length),0),n=[];for(let r=0;r<t;r++)n.push(`Column ${r+1}`);return n}function Wr(e,t){let n={};return e.forEach((r,o)=>{n[r]=t[o]}),n}function Br(e,t,n){let r={};for(let o of n){let s=e[o]||`Column ${o+1}`;r[s]=t[o]}return r}function zr(e,t){if(e.inputColumnHeader){let n=t.findIndex(r=>r===e.inputColumnHeader);if(n>=0)return n}return typeof e.inputColumnOrdinalPosition=="number"?Math.max(0,e.inputColumnOrdinalPosition-1):0}function Kr(e,t){let n=[];if(e.contextColumnHeaders?.length)for(let r of e.contextColumnHeaders){let o=t.findIndex(s=>s===r);o>=0&&n.push(o)}if(e.contextColumnOrdinals?.length)for(let r of e.contextColumnOrdinals){let o=Math.max(0,r-1);n.includes(o)||n.push(o)}return n}function Be(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Vr(e){return Array.isArray(e)?e.length&&typeof e[0]=="object"&&!Array.isArray(e[0])?e.map(t=>Be(t)):e.map(t=>Be(t)):e&&typeof e=="object"?[Be(e)]:[Be(e)]}async function Xr({sheetId:e,sheetTabTitle:t,header:n,outputHeaders:r,outputRows:o,startRowIndex:s,getAuthToken:a}){let c=n.length+1,i=c+r.length-1,u=`${t}!${ze(c)}1:${ze(i)}1`;if(await $e(e,a,"values.update",{range:u,valueInputOption:"RAW",resource:{values:[r]}},"PUT"),!o.length)return;let l=s+o.length-1,d=`${t}!${ze(c)}${s}:${ze(i)}${l}`;await $e(e,a,"values.update",{range:d,valueInputOption:"RAW",resource:{values:o}},"PUT")}async function Yr(e,t,n){return await $e(e,n,"addSheet",{properties:{title:t}},"POST"),t}async function Qr({sheetId:e,sheetTabTitle:t,values:n,getAuthToken:r}){let o=Math.max(1,n.reduce((c,i)=>Math.max(c,i.length),0)),s=n.length,a=`${t}!A1:${ze(o)}${s}`;await $e(e,r,"values.update",{range:a,valueInputOption:"RAW",resource:{values:n}},"PUT")}function ze(e){let t=e,n="";for(;t>0;){let r=(t-1)%26;n=String.fromCharCode(65+r)+n,t=Math.floor((t-r)/26)}return n}function In(e){let t=e.replace(/[^a-zA-Z0-9 _-]/g,"").trim();return(t.length>80?t.slice(0,80):t)||`Rover-${Math.random().toString(36).slice(2,6)}`}function En(e){if(!e.length)return["result"];let t=e.reduce((r,o)=>Math.max(r,o.length),0);if(t<=1)return["result"];let n=[];for(let r=0;r<t;r++)n.push(`value_${r+1}`);return n}function kt(e,t,n){if(!e)return"";let r=/\{\{\s*([^}]+)\s*\}\}/g;return e.replace(r,(o,s)=>{let a=String(s).trim(),[c,...i]=Jr(a),u;switch(c){case"input_value":u=t.input_value;break;case"row_number":u=t.row_number;break;case"row_data":u=t.row_data;break;case"context":u=t.context;break;case"step":u=n;break;default:u=t}let l=Zr(u,i.join("."));if(l==null)return"";if(typeof l=="string")return l;try{return JSON.stringify(l)}catch{return String(l)}})}function Ot(e,t,n){if(e==null)return e;if(typeof e=="string")return kt(e,t,n);if(Array.isArray(e))return e.map(r=>Ot(r,t,n));if(typeof e=="object"){let r={};for(let[o,s]of Object.entries(e))r[o]=Ot(s,t,n);return r}return e}function Jr(e){return e.replace(/\["([^"]+)"\]/g,".$1").replace(/\['([^']+)'\]/g,".$1").split(".").filter(Boolean)}function Zr(e,t){if(!t)return e;let n=t.split(".").filter(Boolean),r=e;for(let o of n){if(r==null)return;r=r[o]}return r}var Dt=12;function Rn(e,t){return{error:t,warnings:[t],output:[{tool:e,status:"unsupported_in_embed",message:t}]}}function dt(e){let t=e.code||"UNKNOWN_ERROR",n=e.message||"Operation failed",r=Array.isArray(e.missing)?e.missing:[],o=!!e.retryable;return{success:!1,error:{code:t,message:n,missing:r,next_action:e.next_action,retryable:o,requires_api_key:!!e.requires_api_key},missing:r,next_action:e.next_action,retryable:o}}function eo(e){let t=Array.isArray(e?.prevSteps)?e.prevSteps:[],n=i=>String(i||"").replace(/\s+/g," ").trim(),r=Array.isArray(e?.chatLog)?e.chatLog.map(i=>({role:i?.role==="user"?"user":"model",message:typeof i?.message=="string"?n(i.message):""})).filter(i=>!!i.message):[],o=[];for(let i of r){let u=o[o.length-1];u&&u.role===i.role&&u.message===i.message||o.push(i)}let s=o.slice(-Dt),a=new Set,c=[];for(let i=s.length-1;i>=0;i-=1){let u=s[i],l=`${u.role}::${u.message.toLowerCase()}`;a.has(l)||(a.add(l),c.push(u))}return s=c.reverse(),s.length>Dt&&(s=s.slice(-Dt)),{prevSteps:t,chatLog:s}}function Ee(e){if(!e?.isCancelled)return!1;try{return!!e.isCancelled()}catch{return!1}}function xn(e){if(Ee(e))throw new DOMException("Run cancelled","AbortError")}function lt(){return{error:"Run cancelled"}}async function to(e){let t=e.bridgeRpc;if(!t)return{error:`Bridge RPC unavailable for ${e.toolName}`};let n=String(e.toolArgs?.message||e.toolArgs?.user_input||e.toolArgs?.task_instruction||e.userInput||"").trim();e.onStatusUpdate?.(e.toolName===N.ROVER_EXTERNAL_ACT_CONTEXT?"Fetching external action context...":"Fetching external context...",`Calling ${e.toolName}`,"execute");let r=await t("executeTool",{call:{name:e.toolName,args:{...e.toolArgs,...n?{message:n}:{}}}});if(!(r?.success===!0)){let s=String(r?.output?.error?.message||r?.error||`${e.toolName} failed`);return{error:s,output:r?.output,warnings:s?[s]:void 0}}return{output:r?.output,warnings:Array.isArray(r?.output?.warnings)?r.output.warnings:void 0}}async function me(e,t,n){xn(e);let r=await e.callExtensionRouter(t,n);return xn(e),r}async function Ie(e){let{toolName:t,toolArgs:n,userInput:r,tabs:o,scopedTabIds:s,seedTabId:a,getScopedTabRuntimeContext:c,onScopedTabIdsTouched:i,trajectoryId:u,plannerPrevSteps:l,files:d,onStatusUpdate:f,recordingContext:h,toolFunctions:y,bridgeRpc:v,ctx:I,functionDeclarations:C,driveAuthToken:F,agentLog:R,onPrevStepsUpdate:P}=e,b=I;if(!b)return{error:"Agent context unavailable"};if(Ee(b))return lt();let k=Array.isArray(o)&&o.length?o:[{id:1}],M=c?.()||{},$=M.scopedTabIds??s,x=M.seedTabId??a,L=Array.isArray($)&&$.length?Array.from(new Set($.map(g=>Number(g)).filter(g=>Number.isFinite(g)&&g>0))):Array.from(new Set(k.map(g=>Number(g?.id)).filter(g=>Number.isFinite(g)&&g>0))),E=Number(x)>0?Number(x):L[0],p=await le(v,k,{scopedTabIds:L,seedTabId:E});if(Ee(b))return lt();let m=p.tabOrder.length?p.tabOrder:k.map(g=>g.id),T=eo(R);try{switch(t){case N.ACT:{let g=n?.user_input||n?.prompt||n?.task_instruction||r,_=await bn({tabOrder:m,scopedTabIds:L,seedTabId:E,onScopedTabIdsTouched:i,userInput:g,schema:n?.schema,previousSteps:T.prevSteps,plannerPrevSteps:l,files:d,chatLog:T.chatLog,recordingContext:h,trajectoryId:u,onStatusUpdate:f,functionDeclarations:C,bridgeRpc:v,ctx:b,onPrevStepsUpdate:P}),A=_.data??(_.needsUserInput?{status:"waiting_input",needsUserInput:!0,questions:Array.isArray(_.questions)?_.questions:[]}:_.navigationPending?{status:"in_progress",taskStatus:"in_progress",navigationPending:!0,navigationTool:_.navigationTool,navigationOutcome:_.navigationOutcome,logicalTabId:_.logicalTabId}:void 0);return{..._,output:A}}case N.EXTRACT:{let g=n?.user_input||n?.prompt||n?.task_instruction||r,_=n?.output_destination||n?.outputDestination,A=_?Ae(_,l):void 0,w=b.apiMode||!F||A?.sheetId&&ge(A.sheetId),D=n?.return_data_only??n?.returnDataOnly??w,S=await ct({tabOrder:m,scopedTabIds:L,seedTabId:E,onScopedTabIdsTouched:i,userInput:g,schema:n?.schema,outputDestination:_,schemaHeaderSheetInfo:n?.schema_header_sheet_info||n?.schemaHeaderSheetInfo,plannerPrevSteps:l,files:d,recordingContext:h,previousSteps:T.prevSteps,trajectoryId:u,returnDataOnly:D,onStatusUpdate:f,bridgeRpc:v,ctx:b,onPrevStepsUpdate:P});if(S.data&&Array.isArray(S.data)&&_&&w){let G=We(n?.schema,S.data),O=A||Ae(_,l),U=b.tabularStore,{sheetInfo:H,headerRow:q}=ut({store:U,target:O,headers:G,objects:S.data,schema:n?.schema}),K=Se(U,H);return{...S,output:S.data,schemaHeaderSheetInfo:[{headingInfo:{schema:n?.schema||{},headings:q,title:H.sheetTitle||H.sheetTab},sheetInfo:K,headerRow:q}]}}return{...S,output:S.data}}case N.CRAWL:{let g=n?.user_input||n?.prompt||n?.task_instruction||r,_=n?.output_destination||n?.outputDestination,A=_?Ae(_,l):void 0,w=b.apiMode||!F||A?.sheetId&&ge(A.sheetId),D=n?.return_data_only??n?.returnDataOnly??w,S=await yn({tabOrder:m,userInput:g,schema:n?.schema,plannerPrevSteps:l,files:d,recordingContext:h,previousSteps:T.prevSteps,trajectoryId:u,onStatusUpdate:f,returnDataOnly:D,bridgeRpc:v,ctx:b,onPrevStepsUpdate:P});if(S.data&&Array.isArray(S.data)&&_&&w){let G=We(n?.schema,S.data),O=A||Ae(_,l),U=b.tabularStore,{sheetInfo:H,headerRow:q}=ut({store:U,target:O,headers:G,objects:S.data,schema:n?.schema}),K=Se(U,H);return{...S,output:S.data,schemaHeaderSheetInfo:[{headingInfo:{schema:n?.schema||{},headings:q,title:H.sheetTitle||H.sheetTab},sheetInfo:K,headerRow:q}]}}return{...S,output:S.data}}case N.PROCESS_TEXT:{let g=n?.text_inputs||n?.textInputs||[],_=n?.task_instruction||n?.taskInstruction||r;return no({textInputs:g,taskInstruction:_,schema:n?.schema,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b,driveAuthToken:n?.authToken||n?.driveAuthToken||F})}case N.ROVER_EXTERNAL_READ_CONTEXT:case N.ROVER_EXTERNAL_ACT_CONTEXT:return n?.serverResult?n.serverResult.success?{output:n.serverResult.data}:{error:n.serverResult.error||"Server-side execution failed"}:to({toolName:t,toolArgs:n||{},userInput:r,bridgeRpc:v,onStatusUpdate:f});case N.CREATE_SHEET_FROM_DATA:{let g=n?.data_inputs||n?.dataInputs||[],_=n?.task_instruction||n?.taskInstruction||r;return ro({dataInputs:g,taskInstruction:_,schema:n?.schema,outputSheetParameters:n?.output_sheet_parameters||n?.outputSheetParameters,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b,driveAuthToken:n?.authToken||n?.driveAuthToken||F})}case N.INFER_SHEET_DATA:return oo({toolArgs:n,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b,driveAuthToken:n?.authToken||n?.driveAuthToken||F});case N.QUERY_RTRVR_AI_DOCUMENTATION:{let g=n?.user_question||n?.userQuestion||r;return so({userQuestion:g,trajectoryId:u,plannerPrevSteps:l,onStatusUpdate:f,agentLog:T,ctx:b})}case N.GOOGLE_DOC_GENERATOR:{let g=n?.user_input||n?.prompt||n?.task_instruction||r;return ao({userInput:g,toolArgs:n,tabOrder:m,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b,driveAuthToken:n?.authToken||n?.driveAuthToken||F})}case N.GOOGLE_SLIDES_GENERATOR:{let g=n?.user_input||n?.prompt||n?.task_instruction||r;return io({userInput:g,toolArgs:n,tabOrder:m,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b,driveAuthToken:n?.authToken||n?.driveAuthToken||F})}case N.WEBPAGE_GENERATOR:{let g=n?.user_input||n?.prompt||n?.task_instruction||r;return co({userInput:g,toolArgs:n,tabOrder:m,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b})}case N.PDF_FILLER:{let g=n?.user_input||n?.prompt||n?.task_instruction||r;return uo({userInput:g,toolArgs:n,tabOrder:m,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b,driveAuthToken:n?.authToken||n?.driveAuthToken||F})}case N.CUSTOM_TOOL_GENERATOR:{let g=n?.user_input||n?.prompt||n?.task_instruction||r;return lo({userInput:g,plannerPrevSteps:l,files:d,trajectoryId:u,onStatusUpdate:f,agentLog:T,ctx:b})}case N.SHEETS_WORKFLOW:return wn({workflow:n,userInput:r,trajectoryId:u,plannerPrevSteps:l,files:d,onStatusUpdate:f,agentLog:T,ctx:b,bridgeRpc:v,driveAuthToken:F});case N.GRAPHBOT:return Rn(N.GRAPHBOT,"graph_bot is not available in rover embed mode. Use webpage_generator or process_text.");case N.EXECUTE_MULTIPLE_TOOLS:{let g=n?.tool_calls||n?.toolCalls||[],_=[];if(Array.isArray(g))for(let A of g){if(Ee(b))return{error:"Run cancelled",output:_};let w=A.tool_name||A.name,D=A.tool_args||A.args||{};try{let S;if(w&&tt.has(w)?S=await v?.("executeTool",{call:{name:w,args:D}}):S=await v?.("executeClientTool",{name:w,args:D}),Ee(b))return{error:"Run cancelled",output:_};_.push({name:w,result:S,success:!0})}catch(S){if(Ee(b))return{error:"Run cancelled",output:_};_.push({name:w,error:S?.message||String(S),success:!1})}}return{output:_}}case N.CONFIGURE_API_KEY:return Rn(N.CONFIGURE_API_KEY,"configure_api_key is not supported in rover embed mode. Provide publicKey (pk_site_*) via rover.boot(...) or an rvrsess_* sessionToken.");default:{if(y&&y[t])try{if(Ee(b))return lt();let g=await v?.("executeClientTool",{name:t,args:n});return Ee(b)?lt():{output:g}}catch(g){return{error:g?.message||String(g)}}return{error:`Unsupported tool: ${t}`}}}}catch(g){if(g?.name==="AbortError")throw g;let _=Y(g,`Failed to execute tool: ${t}`);return{output:dt(_),error:_.message,errorDetails:_,warnings:_.message?[_.message]:void 0}}}async function no({textInputs:e,taskInstruction:t,schema:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){a?.("Processing text...","Calling process_text","execute");let l={siteId:i.siteId,textInputs:e,taskInstruction:t,schema:n,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o},d=await me(i,Q.processText,l);return d?.success?{output:d.data?.text?[d.data.text]:d.data?.data,error:d.data?.error,errorDetails:d.data?.errorDetails,creditsUsed:d.data?.creditsUsed,warnings:d.data?.warnings}:{error:d?.error||"process_text failed"}}async function ro({dataInputs:e,taskInstruction:t,schema:n,outputSheetParameters:r,plannerPrevSteps:o,files:s,trajectoryId:a,onStatusUpdate:c,agentLog:i,ctx:u,driveAuthToken:l}){c?.("Creating sheet...","Calling create_sheet_from_data","execute");let d=Ae(r,o),f=u.apiMode||!l||d.sheetId&&ge(d.sheetId),h={siteId:u.siteId,dataInputs:e,taskInstruction:t,schema:n,outputSheetParameters:r,agentLog:{prevSteps:i?.prevSteps||[],chatLog:i?.chatLog||[]},plannerPrevSteps:o,llmIntegration:u.llmIntegration,apiMode:u.apiMode,apiToolsConfig:u.apiToolsConfig,authToken:l||"",timestamp:u.userTimestamp,trajectoryId:a,userProfile:u.userProfile,files:s,returnDataOnly:f},y=await me(u,Q.createSheetFromData,h);if(!y?.success)return{error:y?.error||"create_sheet_from_data failed"};if(f){let v=y.data?.jsonData||y.data?.data||[],I=Array.isArray(v)?v:[v],C=We(n,I),F=d||Ae(r,o),R=u.tabularStore,{sheetInfo:P,headerRow:b}=ut({store:R,target:F,headers:C,objects:I,schema:n}),k=Se(R,P);return{output:I,error:y.data?.error,errorDetails:y.data?.errorDetails,creditsUsed:y.data?.creditsUsed,warnings:y.data?.warnings,schemaHeaderSheetInfo:[{headingInfo:{schema:n||{},headings:b,title:P.sheetTitle||P.sheetTab},sheetInfo:k,headerRow:b}]}}return{output:y.data?.statusText?[y.data.statusText]:y.data?.sheetInfo,error:y.data?.error,errorDetails:y.data?.errorDetails,creditsUsed:y.data?.creditsUsed,warnings:y.data?.warnings,schemaHeaderSheetInfo:y.data?.schemaHeaderSheetInfo}}async function oo({toolArgs:e,plannerPrevSteps:t,files:n,trajectoryId:r,onStatusUpdate:o,agentLog:s,ctx:a,driveAuthToken:c}){o?.("Inferring sheet data...","Calling infer_sheet_data","execute");let i=e?.source_sheet_from_history||e?.sourceSheetFromHistory,u=i?je(i,t):void 0,l=u?.sheetId||e?.sheet_id||e?.sheetId,d=u?.sheetTab||e?.sheet_tab_title||e?.sheetTabTitle,f=u?.sheetTabId||e?.sheet_tab_id||e?.sheetTabId,h=e?.output_destination||e?.outputDestination||e?.output_sheet_parameters||e?.outputSheetParameters,y=a.apiMode||!c||l&&ge(l),v;if(y&&l&&d){let R=a.tabularStore,P=f!==void 0?R.getTabByIndex(l,f):R.getTabByTitle(l,d);P&&(v=R.toAny2D(l,P.index,!0))}let I={siteId:a.siteId,...e,sheetId:l,sheetTabTitle:d,sheetTabId:f,sheetData:v,returnDataOnly:y,plannerPrevSteps:t,agentLog:{prevSteps:s?.prevSteps||[],chatLog:s?.chatLog||[]},llmIntegration:a.llmIntegration,apiMode:a.apiMode,apiToolsConfig:a.apiToolsConfig,authToken:c||"",timestamp:a.userTimestamp,trajectoryId:r,userProfile:a.userProfile,files:n},C=await me(a,Q.infer,I);if(!C?.success)return{error:C?.error||"infer_sheet_data failed"};let F=Array.isArray(C.data?.data)?C.data.data:[];if(y&&l&&d){let R=a.tabularStore;if(!R.hasSheet(l))return{error:`Memory sheet not found: ${l}`};let P=We(e?.schema,F),b=h?.new_tab_title||h?.newTabTitle||h?.new_tab_title_template;if(b){let E=F.map(g=>P.map(_=>g?.[_]??"")),{sheetInfo:p,headerRow:m}=Sn({store:R,target:{sheetId:l,sheetTitle:u?.sheetTitle,tabTitle:b},headers:P,rows:E,schema:e?.schema}),T=Se(R,p);return{output:F,schemaHeaderSheetInfo:[{headingInfo:{schema:e?.schema||{},headings:m,title:p.sheetTitle||p.sheetTab},sheetInfo:T,headerRow:m}],error:C.data?.error,errorDetails:C.data?.errorDetails,creditsUsed:C.data?.creditsUsed,warnings:C.data?.warnings}}let k=f!==void 0?R.getTab(l,f):R.getTabByTitle(l,d)||R.getTab(l,0);R.mergeHeaderRow(l,k.index,P),e?.schema&&R.setSchema(l,k.index,e.schema,{preserveHeader:!0});let M=!!e?.is_first_row_header||!!e?.isFirstRowHeader;for(let E of F){let p=E?.__row_number,m=typeof p=="number"?p-1-(M?1:0):void 0;if(m===void 0||m<0)continue;let T={};P.forEach(g=>{T[g]=E?.[g]??""}),R.upsertColumnsByHeader(l,k.index,m,T)}let $=R.toSheetInfo(l,k.index),x=Se(R,$),L=R.getTab(l,k.index).headerRow;return{output:F,schemaHeaderSheetInfo:[{headingInfo:{schema:e?.schema||{},headings:L,title:$.sheetTitle||$.sheetTab},sheetInfo:x,headerRow:L}],error:C.data?.error,errorDetails:C.data?.errorDetails,creditsUsed:C.data?.creditsUsed,warnings:C.data?.warnings}}return{output:F,schemaHeaderSheetInfo:C.data?.schemaHeaderSheetInfo,error:C.data?.error,errorDetails:C.data?.errorDetails,creditsUsed:C.data?.creditsUsed,warnings:C.data?.warnings}}async function so({userQuestion:e,trajectoryId:t,plannerPrevSteps:n,onStatusUpdate:r,agentLog:o,ctx:s}){r?.("Querying docs...","Calling query_rtrvr_docs","execute");let a={siteId:s.siteId,userQuestion:e,plannerPrevSteps:n,agentLog:{prevSteps:o?.prevSteps||[],chatLog:o?.chatLog||[]},llmIntegration:s.llmIntegration,apiMode:s.apiMode,apiToolsConfig:s.apiToolsConfig,authToken:"",timestamp:s.userTimestamp,trajectoryId:t,userProfile:s.userProfile},c=await me(s,Q.queryRtrvrDocs,a);return c?.success?{output:c.data?.text||c.data?.data,error:c.data?.error,errorDetails:c.data?.errorDetails,creditsUsed:c.data?.creditsUsed,warnings:c.data?.warnings}:{error:c?.error||"query_rtrvr_docs failed"}}function An(e){let t=Y(e),n=String(t.message||"").toLowerCase();return t.code==="MISSING_API_KEY"||t.code==="INVALID_API_KEY"||t.code==="UNAUTHENTICATED"||n.includes("oauth")||n.includes("auth token")||n.includes("access token")||n.includes("google")}function Pt(e,t=["authToken"]){let n={code:"MISSING_AUTH_TOKEN",message:`${e} requires authentication token.`,missing:t,requires_api_key:t.includes("apiKey"),retryable:!1,next_action:"Provide required auth token in tool args or rover.boot(...)."};return{output:dt(n),error:n.message,errorDetails:n,warnings:[`${e} skipped: missing ${t.join(", ")}`]}}function vn(e,t,n){let r=e==="doc"?"In-Memory Doc Draft":"In-Memory Slides Draft",o=e==="doc"?`# ${r}
|
|
2
2
|
|
|
3
3
|
Prompt:
|
|
4
4
|
${t}`:`# ${r}
|
|
@@ -7,18 +7,18 @@ Slide 1: ${t}
|
|
|
7
7
|
|
|
8
8
|
Slide 2: Key points
|
|
9
9
|
|
|
10
|
-
Slide 3: Summary`,s=n||`${e==="doc"?"Google Doc":"Google Slides"} generation fell back to in-memory draft.`;return{output:[o],generatedContentRef:{type:`${e}_draft`,title:r,content:o,degraded:!0,fallback_mode:"memory"},warnings:[s]}}async function zr({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){if(a?.("Generating doc...","Calling google_doc_generator","execute"),!u)return kt("google_doc_generator",["authToken"]);let l=await i.getPageData(n[0]),d={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:l},tabOrder:n,outputDestination:t?.output_destination||t?.outputDestination,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o},f;try{f=await pe(i,Q.googleDocGenerator,d)}catch(m){if(Sn(m)){let k=Y(m);return In("doc",e,k.message)}let T=Y(m,"google_doc_generator failed");return{output:ct(T),error:T.message,errorDetails:T,warnings:T.message?[T.message]:void 0}}return{output:f.data?.llmOutput||f.data?.generatedContentRef,generatedContentRef:f.data?.generatedContentRef,error:f.data?.error,errorDetails:f.data?.errorDetails,creditsUsed:f.data?.creditsUsed,warnings:f.data?.warnings}}async function Xr({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){if(a?.("Generating slides...","Calling google_slides_generator","execute"),!u)return kt("google_slides_generator",["authToken"]);let l=await i.getPageData(n[0]),d={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:l},tabOrder:n,outputDestination:t?.output_destination||t?.outputDestination,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o},f;try{f=await pe(i,Q.googleSlidesGenerator,d)}catch(m){if(Sn(m)){let k=Y(m);return In("slides",e,k.message)}let T=Y(m,"google_slides_generator failed");return{output:ct(T),error:T.message,errorDetails:T,warnings:T.message?[T.message]:void 0}}return{output:f.data?.llmOutput||f.data?.generatedContentRef,generatedContentRef:f.data?.generatedContentRef,error:f.data?.error,errorDetails:f.data?.errorDetails,creditsUsed:f.data?.creditsUsed,warnings:f.data?.warnings}}async function Vr({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i}){a?.("Generating webpage...","Calling webpage_generator","execute");let u=await i.getPageData(n[0]),l={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:u},tabOrder:n,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o,outputDestination:t?.output_destination||t?.outputDestination},d=await pe(i,Q.webpageGenerator,l);return d?.success?{output:d.data?.llmOutput||d.data?.generatedContentRef,generatedContentRef:d.data?.generatedContentRef,error:d.data?.error,errorDetails:d.data?.errorDetails,creditsUsed:d.data?.creditsUsed,warnings:d.data?.warnings}:{error:d?.error||"webpage_generator failed"}}async function Yr({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){if(a?.("Filling PDF...","Calling pdf_filler","execute"),!u)return kt("pdf_filler",["authToken"]);let l=await i.getPageData(n[0]),d={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:l},tabOrder:n,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o,outputDestination:t?.output_destination||t?.outputDestination},f=await pe(i,Q.pdfFiller,d);return f?.success?{output:f.data?.llmOutput||f.data?.generatedContentRef,generatedContentRef:f.data?.generatedContentRef,error:f.data?.error,errorDetails:f.data?.errorDetails,creditsUsed:f.data?.creditsUsed,warnings:f.data?.warnings}:{error:f?.error||"pdf_filler failed"}}async function Qr({userInput:e,plannerPrevSteps:t,files:n,trajectoryId:r,onStatusUpdate:o,agentLog:s,ctx:a}){o?.("Generating custom tool...","Calling custom_tool_generator","execute");let c={siteId:a.siteId,userInput:e,plannerPrevSteps:t,agentLog:{prevSteps:s?.prevSteps||[],chatLog:s?.chatLog||[]},llmIntegration:a.llmIntegration,apiMode:a.apiMode,apiToolsConfig:a.apiToolsConfig,authToken:"",timestamp:a.userTimestamp,trajectoryId:r,userProfile:a.userProfile,files:n},i=await pe(a,Q.customToolGenerator,c);return i?.success?{output:i.data?.generatedTools||i.data?.output||i.data,generatedTools:i.data?.generatedTools,error:i.data?.error,errorDetails:i.data?.errorDetails,creditsUsed:i.data?.creditsUsed,warnings:i.data?.warnings}:{error:i?.error||"custom_tool_generator failed"}}var En=15,Ot=12;function wn(e){if(!Array.isArray(e)||!e.length)return[];let t=e.map(a=>({role:a?.role==="user"?"user":"model",message:String(a?.message||"").replace(/\s+/g," ").trim()})).filter(a=>!!a.message),n=[];for(let a of t){let c=n[n.length-1];c&&c.role===a.role&&c.message===a.message||n.push(a)}let r=n.slice(-Ot),o=new Set,s=[];for(let a=r.length-1;a>=0;a-=1){let c=r[a],i=`${c.role}::${c.message.toLowerCase()}`;o.has(i)||(o.add(i),s.push(c))}return r=s.reverse(),r.length>Ot&&(r=r.slice(-Ot)),r}async function Jr(e){let{userInput:t,tabs:n,scopedTabIds:r,seedTabId:o,getScopedTabRuntimeContext:s,previousMessages:a=[],trajectoryId:c,previousSteps:i=[],files:u,continuePlanning:l=!1,recordingContext:d,driveAuthToken:f,agentLog:m,lastToolPreviousSteps:T,ctx:k,bridgeRpc:b,functionDeclarations:A}=e,O=s?.()||{},S=O.scopedTabIds??r,y=O.seedTabId??o,v=Array.isArray(n)&&n.length?n:[{id:1}],M=await ue(b,v,{scopedTabIds:S,seedTabId:y}),H=M.tabOrder.length?M.tabOrder:v.map(I=>I.id),F=M.activeTabId,R=M.tabMetaById,x={},L=async(I,N)=>{try{return await k.getPageData(I,{onlyTextContent:!1,...N?.allowExternalFetch?{__roverAllowExternalFetch:!0}:{},...N?.allowExternalFetch?{__roverExternalIntent:"auto"}:{},...N?.allowExternalFetch?{__roverExternalMessage:t}:{}})}catch{let E=R[I];return{url:E?.url||"",title:E?.title||(E?.external?"External Tab (Inaccessible)":""),content:"",contentType:"text/html"}}};x[F]=await L(F,{allowExternalFetch:!0});let P=H.filter(I=>I!==F),_=await Promise.all(P.map(async I=>({tabId:I,pageData:await L(I)})));for(let{tabId:I,pageData:N}of _)x[I]=N;let h=m?.chatLog?.length?wn(m.chatLog):wn(a.filter(I=>I.role==="user"||I.role==="assistant").map(I=>({role:I.role==="user"?"user":"model",message:I.content}))),p={siteId:k.siteId,userInput:t,webPageMap:Object.keys(x).length?x:void 0,tabOrder:H,recordingContext:d,previousSteps:i,lastToolPreviousSteps:T,chatLog:h.length?h:void 0,llmIntegration:k.llmIntegration,apiMode:k.apiMode,apiToolsConfig:k.apiToolsConfig,files:u,userFunctionDeclarations:A,authToken:f||"",timestamp:k.userTimestamp,continuePlanning:l,trajectoryId:c,userProfile:k.userProfile},g=await k.callExtensionRouter(Q.plan,p);if(!g?.success)return{taskComplete:!1,error:g?.error||"Planner failed"};let w=g.data;return{plan:w.plan,questions:w.questions,taskComplete:w.taskComplete||!1,modelParts:w.modelParts,overallThought:w.overallThought,accTreeIds:w.accTreeIds,error:w.error,errorDetails:w.errorDetails,warnings:w.warnings,userUsageData:w.userUsageData||{creditsUsed:w.creditsUsed||0}}}async function ut(e,t=[],n=0){if(n>=En)return{response:{taskComplete:!1,error:`Max planner recursion depth reached (${En})`},toolResults:t,completedWorkflow:void 0,previousSteps:e.previousSteps||[]};if(e.ctx.isCancelled?.())return{response:{taskComplete:!1,error:"Run cancelled"},toolResults:t,completedWorkflow:void 0,previousSteps:e.previousSteps||[]};let r=e.previousSteps||[],o=e.lastToolPreviousSteps||e.agentLog?.prevSteps,s=await Jr({...e,previousSteps:r,ctx:e.ctx,functionDeclarations:e.functionDeclarations});if(s.questions&&s.questions.length>0){e.onStatusUpdate?.("Planner needs more input",s.overallThought,"verify");let a={modelParts:s.modelParts,thought:s.overallThought,questionsAsked:s.questions};return r=[...r,a],e.onPlannerHistoryUpdate?.(r),{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}if(s.plan&&!s.error){let a=s.plan;e.onStatusUpdate?.(`Planner selected ${a.toolName}`,a.thought??s.overallThought,"execute");let c=a.serverResult,i=c?{output:c.success?c.data:void 0,error:c.success?void 0:c.error||"Server-side execution failed"}:await be({...e,toolName:a.toolName,toolArgs:a.parameters,plannerPrevSteps:r,agentLog:{prevSteps:o||e.agentLog?.prevSteps,chatLog:e.agentLog?.chatLog},ctx:e.ctx,bridgeRpc:e.bridgeRpc,functionDeclarations:e.functionDeclarations,onPrevStepsUpdate:e.onPrevStepsUpdate});t.push(i),i.prevSteps?.length&&(o=i.prevSteps,e.onPrevStepsUpdate?.(i.prevSteps));let u={modelParts:s.modelParts,thought:a.thought??s.overallThought,toolCall:{name:a.toolName,args:a.parameters},textOutput:i.output,error:i.error,schemaHeaderSheetInfo:i.schemaHeaderSheetInfo,generatedContentRef:i.generatedContentRef,lastToolPreviousSteps:i.prevSteps};return r=[...r,u],e.onPlannerHistoryUpdate?.(r),i.error&&!s.taskComplete?ut({...e,previousSteps:r,lastToolPreviousSteps:o||e.lastToolPreviousSteps,continuePlanning:!0},t,n+1):!s.taskComplete&&!i.error?ut({...e,previousSteps:r,lastToolPreviousSteps:o||e.lastToolPreviousSteps,continuePlanning:!0},t,n+1):{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}if(s.taskComplete){e.onStatusUpdate?.("Planner marked task complete",s.overallThought,"complete");let a={modelParts:s.modelParts,thought:s.overallThought||"Task completed"};return r=[...r,a],e.onPlannerHistoryUpdate?.(r),{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}return{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}var oe;(function(e){e.Act="actOnTab",e.Crawl="crawlWebPages",e.Extract="extractToSheets",e.PdfFiller="fillPdfForms",e.CreateCustomTool="createCustomTool",e.CreateWebPage="createWebPage",e.CreateGoogleDoc="createGoogleDoc",e.CreateGoogleSlides="createGoogleSlides"})(oe||(oe={}));var Rn=new Set(Object.values(oe)),An={[oe.Act]:U.ACT,[oe.Crawl]:U.CRAWL,[oe.Extract]:U.EXTRACT,[oe.PdfFiller]:U.PDF_FILLER,[oe.CreateCustomTool]:U.CUSTOM_TOOL_GENERATOR,[oe.CreateWebPage]:U.WEBPAGE_GENERATOR,[oe.CreateGoogleDoc]:U.GOOGLE_DOC_GENERATOR,[oe.CreateGoogleSlides]:U.GOOGLE_SLIDES_GENERATOR};function vn(e){let t=Zr(e),n=e,r=[...t].sort((o,s)=>s.startIndex-o.startIndex);for(let o of r)n=n.slice(0,o.startIndex)+n.slice(o.endIndex);return n=n.replace(/\s+/g," ").trim(),{originalMessage:e,cleanedMessage:n,functionCalls:t,hasOnlyFunctionCalls:n===""}}function Zr(e){let t=[],n=/@([\w.]+)\s*\(/g,r;for(;r=n.exec(e);){let o=r.index,s=r[1],{endIndex:a,paramsString:c}=to(e,o+r[0].length);if(a!==-1){let i=no(c);t.push({functionName:s,parameters:i,rawExpression:e.substring(o,a+1),startIndex:o,endIndex:a+1}),n.lastIndex=a+1}}return t}function eo(e){return Rn.has(e)}function to(e,t){let n=1,r=!1,o=!1,s=!1,a=t;for(;a<e.length&&n>0;){let c=e[a];if(s){s=!1,a++;continue}c==="\\"&&(r||o)?s=!0:c==='"'&&!r?o=!o:c==="'"&&!o?r=!r:!r&&!o&&(c==="("?n++:c===")"&&n--),a++}return n===0?{endIndex:a-1,paramsString:e.substring(t,a-1).trim()}:{endIndex:-1,paramsString:""}}function no(e){if(!e)return{};let t={},n=ro(e);for(let r of n){let o=r.indexOf("=");if(o===-1)t.prompt=xn(r.trim());else{let s=r.substring(0,o).trim(),a=r.substring(o+1).trim();t[s]=xn(a)}}return t}function ro(e){let t=[],n="",r=!1,o=!1,s=0,a=0,c=!1;for(let i=0;i<e.length;i++){let u=e[i];if(c){n+=u,c=!1;continue}if(u==="\\"){c=!0,n+=u;continue}if(u==='"'&&!r?o=!o:u==="'"&&!o&&(r=!r),!r&&!o){if(u==="(")s++;else if(u===")")s--;else if(u==="[")a++;else if(u==="]")a--;else if(u===","&&s===0&&a===0){t.push(n.trim()),n="";continue}}n+=u}return n.trim()&&t.push(n.trim()),t}function xn(e){if(!e)return"";if(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1).replace(/\\"/g,'"').replace(/\\'/g,"'");if(e.startsWith("[")||e.startsWith("{"))try{return JSON.parse(e)}catch{}return/^-?\d+(\.\d+)?$/.test(e)?parseFloat(e):e.toLowerCase()==="true"?!0:e.toLowerCase()==="false"?!1:e}function Cn(e,t){if(eo(e))return{isValid:!0,isRequired:!0,isUserDefined:!1,isMcp:!1,mappedFunction:An[e]};if(t[e]){let r=t[e];return{isValid:!0,isRequired:!1,isUserDefined:!r.mcpUrl,isMcp:!!r.mcpUrl,functionDef:r}}let n=Object.entries(t).find(([r,o])=>o.mcpUrl?r.split(".").pop()===e:!1);if(n){let[,r]=n;return{isValid:!0,isRequired:!1,isUserDefined:!1,isMcp:!0,functionDef:r}}return{isValid:!1,isRequired:!1,isUserDefined:!1,isMcp:!1,error:`Function "${e}" not found`}}function kn(e,t){if(!t||!t.parameters)return e;let n={};for(let[r,o]of Object.entries(e)){let s=t.parameters?.[r];if(!s||!s.type){n[r]=o;continue}switch(s.type){case"number":case"integer":{let a=Number(o);n[r]=Number.isFinite(a)?a:o;break}case"boolean":{typeof o=="boolean"?n[r]=o:typeof o=="string"?n[r]=o.toLowerCase()==="true":n[r]=!!o;break}case"array":{if(Array.isArray(o))n[r]=o;else if(typeof o=="string")try{let a=JSON.parse(o);n[r]=Array.isArray(a)?a:[a]}catch{n[r]=[o]}else n[r]=[o];break}case"object":{if(typeof o=="object")n[r]=o;else if(typeof o=="string")try{n[r]=JSON.parse(o)}catch{n[r]={value:o}}else n[r]={value:o};break}default:n[r]=o}}return n}var oo=new Set(["same_tab_scheduled","same_host_navigated","subdomain_navigated","new_tab_opened","switch_tab"]);function Se(e){let t=String(e.navigationOutcome||"").trim().toLowerCase(),n=String(e.navigationMode||"").trim().toLowerCase(),r=e.navigationPending===!0,o=t==="same_tab_scheduled"||r&&!t&&n==="same_tab",s=r||oo.has(t);return{isNavigationProgress:s,isSameTabHandoff:o,continuationReason:s?o?"same_tab_navigation_handoff":"loop_continue":null,normalizedOutcome:t,normalizedMode:n}}var so=["extract","compare","list","across","multiple","many","report","document","spreadsheet","sheet","table","csv","json","pdf","slides"],ao=new Set(["co.uk","org.uk","gov.uk","ac.uk","com.au","net.au","org.au","co.jp","com.br","com.mx","com.sg","co.in"]);function dt(e){let t=String(e||"").trim();if(!t)return"";try{return new URL(t).hostname.toLowerCase()}catch{return""}}function ft(e){let t=String(e||"").trim().toLowerCase().replace(/^\.+/,"");if(!t)return"";if(t==="localhost"||/^\d+\.\d+\.\d+\.\d+$/.test(t))return t;let n=t.split(".").filter(Boolean);if(n.length<2)return t;let r=`${n[n.length-2]}.${n[n.length-1]}`;return n.length>=3&&ao.has(r)?`${n[n.length-3]}.${r}`:r}function io(e,t){let n=String(t?.find(s=>typeof s?.url=="string"&&String(s.url||"").trim())?.url||""),r=ft(dt(n));if(!r)return!1;let o=String(e||"").match(/https?:\/\/[^\s)]+/g)||[];return o.length?o.some(s=>{let a=ft(dt(s));return!!a&&a!==r}):!1}function On(e,t){let n=String(t?.find(a=>typeof a?.url=="string"&&String(a.url||"").trim())?.url||""),r=ft(dt(n)),o=String(e||"").match(/https?:\/\/[^\s)]+/g)||[];if(!o.length||!r)return 0;let s=new Set;for(let a of o){let c=ft(dt(a));!c||c===r||s.add(c)}return s.size}function Pn(e){let t=String(e||"").toLowerCase();return t?(t.match(/\b(first|second|third|then|after that|next|finally)\b/g)||[]).length>=2||(t.match(/\bstep\s*[1-9]\b/g)||[]).length>=2||(t.match(/\b\d+\.\s+/g)||[]).length>=2:!1}function lt(e){let t=String(e||"").toLowerCase().trim();if(!t)return 0;let n=0,r=new Set((t.match(/\b(click|open|go|navigate|fill|type|submit|extract|find|search|compare|summarize|collect|download|upload|create|generate|report)\b/g)||[]).map(s=>s.toLowerCase()));t.length>120&&(n+=1),r.size>=2&&(n+=1),(t.match(/\b(and then|then|after|next|finally|first|second|third)\b/g)||[]).length>=1&&(n+=2),(t.match(/\b(extract|compare|list|all|each|every|across|multiple|many)\b/g)||[]).length>=2&&(n+=2),/https?:\/\/|www\./.test(t)&&(n+=2),(t.match(/\b(report|document|doc|spreadsheet|sheet|table|csv|json|pdf|slides|summary)\b/g)||[]).length>=1&&(n+=2);for(let s of so)t.includes(s)&&(n+=.25);let o=t.split(/\s+/).filter(Boolean);return/^(click|type|fill|open|go to|scroll|press|select)\b/.test(t)&&o.length<=10&&(n=Math.max(0,n-2)),Math.max(0,Math.min(10,Math.round(n)))}function co(e,t){let n=t.taskRouting?.mode||"act";if(n==="planner")return{mode:"planner",reason:"Configured planner mode"};if(n==="act")return{mode:"act",reason:"Configured act mode"};if(Array.isArray(t.previousSteps)&&t.previousSteps.some(c=>Array.isArray(c?.questionsAsked)&&c.questionsAsked.length>0&&!(c?.userAnswers&&Object.keys(c.userAnswers).length>0)))return{mode:"planner",score:lt(e),reason:"Forced planner due to awaiting_user continuation chain."};if(Pn(e))return{mode:"planner",score:lt(e),reason:"Forced planner due to multi-step dependency markers in prompt."};let o=On(e,t.tabs||[]);if(o>1)return{mode:"planner",score:lt(e),reason:`Forced planner due to ${o} cross-domain dependencies.`};let s=lt(e),a=Math.max(3,Math.min(10,Number(t.taskRouting?.actHeuristicThreshold)||7));return s>=a?{mode:"planner",score:s,reason:`Complexity score ${s} >= ${a}`}:{mode:"act",score:s,reason:`Complexity score ${s} < ${a}`}}function uo(e){if(!e||typeof e!="object"||e.error)return!1;let t=s=>Array.isArray(s)?s.length>0:s&&typeof s=="object"?Object.keys(s).length>0:typeof s=="string"?s.trim().length>0:s!=null;if(t(e.data)||Se({navigationPending:e.navigationPending,navigationOutcome:e.navigationOutcome,navigationMode:e.navigation}).isNavigationProgress||e.needsUserInput===!0)return!0;let r=e.output;return r?typeof r=="string"?r.trim().length>0:typeof r!="object"?t(r):r.success===!1||r.error?!1:!!(Se({navigationPending:r.navigationPending,navigationOutcome:r.navigationOutcome,navigationMode:r.navigation}).isNavigationProgress||r.needsUserInput===!0||r.waitingForUserInput===!0||Array.isArray(r.questions)&&r.questions.length>0||String(r.taskStatus||"").trim().toLowerCase()==="in_progress"||r.taskComplete===!0||t(r.data)||typeof r.response=="string"&&String(r.response||"").trim()||t(r)):!1}async function lo(e){let{message:t,toolFunctions:n}=e,r=vn(t),o=[];if(r.functionCalls.length===0)return{processedMessage:t,executedFunctions:[],shouldRunPlanner:!0};let s=r.functionCalls.map(l=>({call:l,validation:Cn(l.functionName,n||{})})),a=s.filter(l=>!l.validation.isValid);if(a.length>0)return{processedMessage:r.cleanedMessage,executedFunctions:[],shouldRunPlanner:!1,error:a.map(l=>l.validation.error).join("; ")};let c=s.every(l=>l.validation.isRequired),i=s.every(l=>l.validation.isUserDefined||l.validation.isMcp);if(r.hasOnlyFunctionCalls&&(c||i)){for(let{call:l,validation:d}of s)if(d.isRequired&&d.mappedFunction){let f={user_input:l.parameters.prompt||l.parameters.user_input||l.parameters.task_instruction||"",...l.parameters},m=await be({...e,toolName:d.mappedFunction,toolArgs:f,userInput:f.user_input,tabs:e.tabs,trajectoryId:e.trajectoryId,plannerPrevSteps:e.previousSteps,agentLog:e.agentLog,ctx:e.ctx,bridgeRpc:e.bridgeRpc,functionDeclarations:e.functionDeclarations,onPrevStepsUpdate:e.onPrevStepsUpdate});o.push({name:l.functionName,parameters:l.parameters,result:m.output,error:m.error,isRequired:!0,prevSteps:m.prevSteps})}else if(d.functionDef)try{let f=kn(l.parameters,d.functionDef),m=await e.bridgeRpc("executeClientTool",{name:l.functionName,args:f});o.push({name:l.functionName,parameters:f,result:m,isRequired:!1})}catch(f){o.push({name:l.functionName,parameters:l.parameters,error:f?.message||String(f),isRequired:!1})}return{processedMessage:r.cleanedMessage,executedFunctions:o,shouldRunPlanner:!1}}return{processedMessage:t,executedFunctions:[],shouldRunPlanner:!0}}async function Dn(e,t){t.onStatusUpdate?.("Analyzing request",e,"analyze");let n=await lo({...t,message:e});if(n.error)return{success:!1,processedMessage:n.processedMessage,error:n.error};if(n.executedFunctions.length>0&&!n.shouldRunPlanner)return{success:!0,processedMessage:n.processedMessage,executedFunctions:n.executedFunctions};if(n.shouldRunPlanner){let r=co(e,t);t.onStatusUpdate?.(`Route selected: ${r.mode}`,r.reason,"route");let o=t.agentLog?.prevSteps;if(r.mode==="act"){t.onStatusUpdate?.("Executing action plan","Using ACT tool loop","execute");let c=Date.now(),i=await be({...t,toolName:U.ACT,toolArgs:{user_input:e},userInput:e,tabs:t.tabs,trajectoryId:t.trajectoryId,plannerPrevSteps:t.previousSteps,agentLog:t.agentLog,ctx:t.ctx,bridgeRpc:t.bridgeRpc,functionDeclarations:t.functionDeclarations,onPrevStepsUpdate:t.onPrevStepsUpdate});Array.isArray(i.prevSteps)&&i.prevSteps.length>0&&(o=i.prevSteps,t.onPrevStepsUpdate?.(o));let u=Date.now()-c,l=Array.isArray(i.prevSteps?.[i.prevSteps.length-1]?.functions)?i.prevSteps[i.prevSteps.length-1].functions.length:0,d=Array.isArray(i.prevSteps)?i.prevSteps.reduce((A,O)=>{let S=Array.isArray(O.functions)?O.functions.filter(y=>y?.response?.status==="Failure").length:0;return A+S},0):0,f=io(e,t.tabs||[]),m=On(e,t.tabs||[]),T=Pn(e);if(!(!uo(i)&&(!!i.error&&(t.taskRouting?.plannerOnActError??!0)&&t.taskRouting?.mode!=="act"||u>8e3||l>3||d>=2||m>1||f||T)))return{success:!i.error,processedMessage:n.processedMessage,directToolResult:i,route:r,error:i.error}}let s={...t,userInput:e,continuePlanning:!1,agentLog:{prevSteps:o||t.agentLog?.prevSteps,chatLog:t.agentLog?.chatLog},lastToolPreviousSteps:o||t.lastToolPreviousSteps,ctx:t.ctx,bridgeRpc:t.bridgeRpc,functionDeclarations:t.functionDeclarations,onPrevStepsUpdate:t.onPrevStepsUpdate,onPlannerHistoryUpdate:t.onPlannerHistoryUpdate},a=await ut(s,[]);return{success:!a.response.error,processedMessage:n.processedMessage,plannerResponse:a,route:r,error:a.response.error}}return{success:!0,processedMessage:n.processedMessage}}function Nn(e){return!e.resume&&!e.preserveHistory}function Mn(e){return!!(e.resume||e.preserveHistory)&&e.resumeFollowupMode==="deterministic_cues"}function Un(e){return e.resume?!1:Number(e.followupChatLogLength)>0}var ne=[],q=null,ee=null,xe=new Ve,se=[],ie=[],z,Ie="",gt="",me=crypto.randomUUID(),ce=crypto.randomUUID(),ae=[],De,Ee=null,fo=new Set(Object.values(U)),V=null,re=new Set,Ne=null,Mt="",Pe=new Set,Ut="",ve=new Map,ht=3e4,po=9e4,go=2e4,Kn=2;function mo(e){let t=String(e?.ui?.agent?.name||"").trim();return t?t.slice(0,64):"Rover"}function ho(e){let t=String(e||"").trim();if(t)try{return new URL(t).hostname.toLowerCase()}catch{return}}function _o(e){if(!(!e?.tools||Array.isArray(e.tools)))return e.tools.web}function To(e){if(e&&(e.externalNavigationPolicy==="open_new_tab_notice"||e.externalNavigationPolicy==="block"||e.externalNavigationPolicy==="allow"))return e.externalNavigationPolicy}function bo(e){let t=e.tabs.map((n,r)=>{if(!n.external&&n.accessMode!=="external_placeholder"&&n.accessMode!=="external_scraped")return;let o=n.accessMode==="external_scraped"?"external_scraped":"external_placeholder";return{tabId:r,host:ho(n.url),title:String(n.title||"").trim()||void 0,accessMode:o,reason:String(n.inaccessibleReason||"").trim()||void 0}}).filter(n=>!!n).slice(0,8);return{mode:"rover_embed",agentName:e.agentName,externalNavigationPolicy:e.externalNavigationPolicy,tabIdContract:"tree_index_mapped_by_tab_order",taskBoundaryId:e.taskBoundaryId,...t.length?{externalTabs:t}:{}}}function yo(e,t){return t===void 0?e:Array.isArray(t)?t:Array.isArray(e)?{...t,client:t.client??e,web:{...t.web||{}}}:{...e,...t,client:t.client??e?.client,web:{...e?.web||{},...t.web||{}}}}function So(e,t){return t?{...e,...t,agent:{...e?.agent||{},...t.agent||{}}}:e}function Io(e){let t=new Map;return e.onmessage=n=>{let r=n.data;if(!r||r.t!=="res")return;let o=t.get(r.id);o&&(t.delete(r.id),o(r))},async function(r,o){let s=crypto.randomUUID(),a=new Promise((c,i)=>{let u=setTimeout(()=>{t.delete(s),i(new Error(`RPC timeout: ${r} (${ht}ms)`))},ht);t.set(s,l=>{clearTimeout(u),l.ok?c(l.result):i(new Error(l.error?.message||"RPC error"))})});return e.postMessage({t:"req",id:s,method:r,params:o}),a}}async function Eo(){if(!ee)return{id:1};try{let e=await ee("getTabContext");if(e&&typeof e=="object")return{id:Number(e.logicalTabId||e.id||1),url:e.url,title:e.title,external:!1,accessMode:"live_dom"}}catch{}try{let e=await ee("getPageData");return{id:1,url:e?.url,title:e?.title,external:!1,accessMode:"live_dom"}}catch{return{id:1,external:!1,accessMode:"live_dom"}}}async function wo(){if(!ee)return[{id:1}];try{let e=await ee("listSessionTabs");if(Array.isArray(e)&&e.length>0){let t=Date.now(),n=e.map(r=>{let o=Number(r?.logicalTabId||r?.id||0),s=!!r?.external;return{id:o,runtimeId:typeof r?.runtimeId=="string"?r.runtimeId:void 0,updatedAt:Number(r?.updatedAt)||0,detachedAt:Number(r?.detachedAt)||0,detachedReason:typeof r?.detachedReason=="string"?r.detachedReason:void 0,url:typeof r?.url=="string"?r.url:void 0,title:typeof r?.title=="string"?r.title:void 0,external:s,accessMode:r?.accessMode==="external_scraped"||r?.accessMode==="external_placeholder"?r.accessMode:s?"external_placeholder":"live_dom",inaccessibleReason:typeof r?.inaccessibleReason=="string"?r.inaccessibleReason:void 0}}).filter(r=>Number.isFinite(r.id)&&r.id>0).filter(r=>{let o=Math.max(Number(r.updatedAt)||0,Number(r.detachedAt)||0);return r.runtimeId?!0:r.external?t-o<=po:r.detachedReason==="opened_pending_attach"?t-o<=go:!1}).map(r=>({id:r.id,url:r.url,title:r.title,external:r.external,accessMode:r.accessMode,inaccessibleReason:r.inaccessibleReason}));if(n.length)return n}}catch{}return[await Eo()]}function Ro(e,t,n){if(n)return n;let r=`${String(e||"")} ${String(t||"")}`.toLowerCase();return r.trim()?/route|routing|complexity/.test(r)?"route":/complete|completed|done|finished|task complete/.test(r)?"complete":/verify|validated|checking|question/.test(r)?"verify":/execute|executing|running|calling|processing|generating|filling|inferring|extracting/.test(r)?"execute":"analyze":"analyze"}function Ao(e,t){let n=String(t||e||"").trim();return n?n.length<=120?n:`${n.slice(0,119)}\u2026`:""}function Z(e,t,n){let r=Ro(e,t,n),o=Ao(e,t),s=V?.runId||"no-run";if(s!=="no-run"&&re.has(s))return;let a=`${s}|${r}|${String(e||"").trim().toLowerCase()}|${o.toLowerCase()}`;if(!(a===Mt||Pe.has(a))){if(Mt=a,Pe.add(a),Pe.size>60){let c=Array.from(Pe).slice(-30);Pe=new Set(c)}self.postMessage({type:"status",message:e,thought:t,stage:r,compactThought:o,runId:V?.runId}),K()}}function xo(e){let t=V?.runId||"no-run";if(t!=="no-run"&&re.has(t))return;let n=[t,e.hasExplicitScope?"1":"0",e.scopedTabIdsInput.join(","),e.listedTabIds.join(","),e.keptScopedTabIds.join(","),e.resolvedTabOrder.join(",")].join("|");n!==Ut&&(Ut=n,self.postMessage({type:"runtime_tabs_diagnostics",runId:V?.runId,diagnostics:e}))}function Ke(e){if(e==null||typeof e=="string"||typeof e=="number"||typeof e=="boolean")return e;try{return structuredClone(e)}catch{try{return JSON.parse(JSON.stringify(e))}catch{return}}}function zn(e){return e.filter(t=>t?.role==="user").slice(-20).map(t=>({role:"user",content:String(t?.content??"")}))}function Ce(e){if(!Array.isArray(e))return[];if(e.length<=Ge.plannerHistory)return e.map(r=>Ke(r)).filter(r=>r!==void 0);let t=[e[0],...e.slice(-(Ge.plannerHistory-1))],n=[];for(let r of t){let o=Ke(r);o!==void 0&&n.push(o)}return n}function Ln(e){if(!Array.isArray(e)||e.length===0)return;let t=[];for(let r=0;r<e.length;r+=1){let o=e[r]?.accTreeId;typeof o=="string"&&o.trim()&&t.push(r)}if(t.length<=3)return;let n=new Set([t[0],...t.slice(-2)]);for(let r of t)n.has(r)||delete e[r].accTreeId}function ze(e){if(!Array.isArray(e))return[];if(e.length<=Ge.prevSteps){let r=[];for(let o of e){let s=Ke(o);s&&typeof s=="object"&&r.push(s)}return Ln(r),r}let t=[e[0],...e.slice(-(Ge.prevSteps-1))],n=[];for(let r of t){let o=Ke(r);o&&typeof o=="object"&&n.push(o)}return Ln(n),n}function vo(e,t){if(!e||typeof e!="object")return;let n=String(e.key||e.id||"").trim(),r=String(e.query||e.question||"").trim(),o=n||`clarification_${t+1}`;if(!r)return;let s=typeof e.required=="boolean",a=typeof e.optional=="boolean",c=s?!!e.required:a?!e.optional:!0;return{key:o,query:r,...typeof e.id=="string"&&e.id.trim()?{id:e.id.trim()}:{},...typeof e.question=="string"&&e.question.trim()?{question:e.question.trim()}:{},...Array.isArray(e.choices)?{choices:e.choices}:{},required:c}}function te(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r=0;r<e.length;r+=1){let o=vo(e[r],r);if(!o)continue;let s=`${o.key}::${o.query}`.toLowerCase();n.has(s)||(n.add(s),t.push(o))}return t.slice(0,6)}function Fn(e){return String(e.query||e.question||"").trim()}function Co(e,t,n){let r=new Set(t.map(i=>i.key)),o={},s=Array.isArray(e?.keys)?e.keys.map(i=>String(i||"").trim()).filter(i=>!!i&&r.has(i)):[];if(e?.answersByKey&&typeof e.answersByKey=="object")for(let[i,u]of Object.entries(e.answersByKey)){if(!r.has(i))continue;let l=String(u||"").trim();l&&(o[i]=l)}let a=String(n||"").trim();if(Object.keys(o).length===0&&a)if(t.length===1)o[t[0].key]=a;else{let i=a.split(`
|
|
10
|
+
Slide 3: Summary`,s=n||`${e==="doc"?"Google Doc":"Google Slides"} generation fell back to in-memory draft.`;return{output:[o],generatedContentRef:{type:`${e}_draft`,title:r,content:o,degraded:!0,fallback_mode:"memory"},warnings:[s]}}async function ao({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){if(a?.("Generating doc...","Calling google_doc_generator","execute"),!u)return Pt("google_doc_generator",["authToken"]);let l=await i.getPageData(n[0]),d={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:l},tabOrder:n,outputDestination:t?.output_destination||t?.outputDestination,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o},f;try{f=await me(i,Q.googleDocGenerator,d)}catch(h){if(An(h)){let v=Y(h);return vn("doc",e,v.message)}let y=Y(h,"google_doc_generator failed");return{output:dt(y),error:y.message,errorDetails:y,warnings:y.message?[y.message]:void 0}}return{output:f.data?.llmOutput||f.data?.generatedContentRef,generatedContentRef:f.data?.generatedContentRef,error:f.data?.error,errorDetails:f.data?.errorDetails,creditsUsed:f.data?.creditsUsed,warnings:f.data?.warnings}}async function io({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){if(a?.("Generating slides...","Calling google_slides_generator","execute"),!u)return Pt("google_slides_generator",["authToken"]);let l=await i.getPageData(n[0]),d={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:l},tabOrder:n,outputDestination:t?.output_destination||t?.outputDestination,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o},f;try{f=await me(i,Q.googleSlidesGenerator,d)}catch(h){if(An(h)){let v=Y(h);return vn("slides",e,v.message)}let y=Y(h,"google_slides_generator failed");return{output:dt(y),error:y.message,errorDetails:y,warnings:y.message?[y.message]:void 0}}return{output:f.data?.llmOutput||f.data?.generatedContentRef,generatedContentRef:f.data?.generatedContentRef,error:f.data?.error,errorDetails:f.data?.errorDetails,creditsUsed:f.data?.creditsUsed,warnings:f.data?.warnings}}async function co({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i}){a?.("Generating webpage...","Calling webpage_generator","execute");let u=await i.getPageData(n[0]),l={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:u},tabOrder:n,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o,outputDestination:t?.output_destination||t?.outputDestination},d=await me(i,Q.webpageGenerator,l);return d?.success?{output:d.data?.llmOutput||d.data?.generatedContentRef,generatedContentRef:d.data?.generatedContentRef,error:d.data?.error,errorDetails:d.data?.errorDetails,creditsUsed:d.data?.creditsUsed,warnings:d.data?.warnings}:{error:d?.error||"webpage_generator failed"}}async function uo({userInput:e,toolArgs:t,tabOrder:n,plannerPrevSteps:r,files:o,trajectoryId:s,onStatusUpdate:a,agentLog:c,ctx:i,driveAuthToken:u}){if(a?.("Filling PDF...","Calling pdf_filler","execute"),!u)return Pt("pdf_filler",["authToken"]);let l=await i.getPageData(n[0]),d={siteId:i.siteId,userInput:e,agentLog:{prevSteps:c?.prevSteps||[],chatLog:c?.chatLog||[]},webPageMap:{[n[0]]:l},tabOrder:n,plannerPrevSteps:r,llmIntegration:i.llmIntegration,apiMode:i.apiMode,apiToolsConfig:i.apiToolsConfig,authToken:u||"",timestamp:i.userTimestamp,trajectoryId:s,userProfile:i.userProfile,files:o,outputDestination:t?.output_destination||t?.outputDestination},f=await me(i,Q.pdfFiller,d);return f?.success?{output:f.data?.llmOutput||f.data?.generatedContentRef,generatedContentRef:f.data?.generatedContentRef,error:f.data?.error,errorDetails:f.data?.errorDetails,creditsUsed:f.data?.creditsUsed,warnings:f.data?.warnings}:{error:f?.error||"pdf_filler failed"}}async function lo({userInput:e,plannerPrevSteps:t,files:n,trajectoryId:r,onStatusUpdate:o,agentLog:s,ctx:a}){o?.("Generating custom tool...","Calling custom_tool_generator","execute");let c={siteId:a.siteId,userInput:e,plannerPrevSteps:t,agentLog:{prevSteps:s?.prevSteps||[],chatLog:s?.chatLog||[]},llmIntegration:a.llmIntegration,apiMode:a.apiMode,apiToolsConfig:a.apiToolsConfig,authToken:"",timestamp:a.userTimestamp,trajectoryId:r,userProfile:a.userProfile,files:n},i=await me(a,Q.customToolGenerator,c);return i?.success?{output:i.data?.generatedTools||i.data?.output||i.data,generatedTools:i.data?.generatedTools,error:i.data?.error,errorDetails:i.data?.errorDetails,creditsUsed:i.data?.creditsUsed,warnings:i.data?.warnings}:{error:i?.error||"custom_tool_generator failed"}}var Cn=15,Mt=12;function kn(e){if(!Array.isArray(e)||!e.length)return[];let t=e.map(a=>({role:a?.role==="user"?"user":"model",message:String(a?.message||"").replace(/\s+/g," ").trim()})).filter(a=>!!a.message),n=[];for(let a of t){let c=n[n.length-1];c&&c.role===a.role&&c.message===a.message||n.push(a)}let r=n.slice(-Mt),o=new Set,s=[];for(let a=r.length-1;a>=0;a-=1){let c=r[a],i=`${c.role}::${c.message.toLowerCase()}`;o.has(i)||(o.add(i),s.push(c))}return r=s.reverse(),r.length>Mt&&(r=r.slice(-Mt)),r}async function fo(e){let{userInput:t,tabs:n,scopedTabIds:r,seedTabId:o,getScopedTabRuntimeContext:s,previousMessages:a=[],trajectoryId:c,previousSteps:i=[],files:u,continuePlanning:l=!1,recordingContext:d,driveAuthToken:f,agentLog:h,lastToolPreviousSteps:y,ctx:v,bridgeRpc:I,functionDeclarations:C}=e,F=s?.()||{},R=F.scopedTabIds??r,P=F.seedTabId??o,b=Array.isArray(n)&&n.length?n:[{id:1}],k=await le(I,b,{scopedTabIds:R,seedTabId:P}),M=k.tabOrder.length?k.tabOrder:b.map(w=>w.id),$=k.activeTabId,x=k.tabMetaById,L={},E=async(w,D)=>{try{return await v.getPageData(w,{onlyTextContent:!1,...D?.allowExternalFetch?{__roverAllowExternalFetch:!0}:{},...D?.allowExternalFetch?{__roverExternalIntent:"auto"}:{},...D?.allowExternalFetch?{__roverExternalMessage:t}:{}})}catch{let S=x[w];return{url:S?.url||"",title:S?.title||(S?.external?"External Tab (Inaccessible)":""),content:"",contentType:"text/html"}}};L[$]=await E($,{allowExternalFetch:!0});let p=M.filter(w=>w!==$),m=await Promise.all(p.map(async w=>({tabId:w,pageData:await E(w)})));for(let{tabId:w,pageData:D}of m)L[w]=D;let T=h?.chatLog?.length?kn(h.chatLog):kn(a.filter(w=>w.role==="user"||w.role==="assistant").map(w=>({role:w.role==="user"?"user":"model",message:w.content}))),g={siteId:v.siteId,userInput:t,webPageMap:Object.keys(L).length?L:void 0,tabOrder:M,recordingContext:d,previousSteps:i,lastToolPreviousSteps:y,chatLog:T.length?T:void 0,llmIntegration:v.llmIntegration,apiMode:v.apiMode,apiToolsConfig:v.apiToolsConfig,files:u,userFunctionDeclarations:C,authToken:f||"",timestamp:v.userTimestamp,continuePlanning:l,trajectoryId:c,userProfile:v.userProfile},_=await v.callExtensionRouter(Q.plan,g);if(!_?.success)return{taskComplete:!1,error:_?.error||"Planner failed"};let A=_.data;return{plan:A.plan,questions:A.questions,taskComplete:A.taskComplete||!1,modelParts:A.modelParts,overallThought:A.overallThought,accTreeIds:A.accTreeIds,error:A.error,errorDetails:A.errorDetails,warnings:A.warnings,userUsageData:A.userUsageData||{creditsUsed:A.creditsUsed||0}}}async function ft(e,t=[],n=0){if(n>=Cn)return{response:{taskComplete:!1,error:`Max planner recursion depth reached (${Cn})`},toolResults:t,completedWorkflow:void 0,previousSteps:e.previousSteps||[]};if(e.ctx.isCancelled?.())return{response:{taskComplete:!1,error:"Run cancelled"},toolResults:t,completedWorkflow:void 0,previousSteps:e.previousSteps||[]};let r=e.previousSteps||[],o=e.lastToolPreviousSteps||e.agentLog?.prevSteps,s=await fo({...e,previousSteps:r,ctx:e.ctx,functionDeclarations:e.functionDeclarations});if(s.questions&&s.questions.length>0){e.onStatusUpdate?.("Planner needs more input",s.overallThought,"verify");let a={modelParts:s.modelParts,thought:s.overallThought,questionsAsked:s.questions};return r=[...r,a],e.onPlannerHistoryUpdate?.(r),{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}if(s.plan&&!s.error){let a=s.plan;e.onStatusUpdate?.(`Planner selected ${a.toolName}`,a.thought??s.overallThought,"execute");let c=a.serverResult,i=c?{output:c.success?c.data:void 0,error:c.success?void 0:c.error||"Server-side execution failed"}:await Ie({...e,toolName:a.toolName,toolArgs:a.parameters,plannerPrevSteps:r,agentLog:{prevSteps:o||e.agentLog?.prevSteps,chatLog:e.agentLog?.chatLog},ctx:e.ctx,bridgeRpc:e.bridgeRpc,functionDeclarations:e.functionDeclarations,onPrevStepsUpdate:e.onPrevStepsUpdate});t.push(i),i.prevSteps?.length&&(o=i.prevSteps,e.onPrevStepsUpdate?.(i.prevSteps));let l=xt(s.modelParts)[0],d={modelParts:s.modelParts,thought:a.thought??s.overallThought,toolCall:{name:a.toolName,args:l?rt({...a.parameters},l):a.parameters},textOutput:i.output,error:i.error,schemaHeaderSheetInfo:i.schemaHeaderSheetInfo,generatedContentRef:i.generatedContentRef,lastToolPreviousSteps:i.prevSteps};return r=[...r,d],e.onPlannerHistoryUpdate?.(r),i.error&&!s.taskComplete?ft({...e,previousSteps:r,lastToolPreviousSteps:o||e.lastToolPreviousSteps,continuePlanning:!0},t,n+1):!s.taskComplete&&!i.error?ft({...e,previousSteps:r,lastToolPreviousSteps:o||e.lastToolPreviousSteps,continuePlanning:!0},t,n+1):{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}if(s.taskComplete){e.onStatusUpdate?.("Planner marked task complete",s.overallThought,"complete");let a={modelParts:s.modelParts,thought:s.overallThought||"Task completed"};return r=[...r,a],e.onPlannerHistoryUpdate?.(r),{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}return{response:s,toolResults:t,completedWorkflow:void 0,previousSteps:r}}var oe;(function(e){e.Act="actOnTab",e.Crawl="crawlWebPages",e.Extract="extractToSheets",e.PdfFiller="fillPdfForms",e.CreateCustomTool="createCustomTool",e.CreateWebPage="createWebPage",e.CreateGoogleDoc="createGoogleDoc",e.CreateGoogleSlides="createGoogleSlides"})(oe||(oe={}));var On=new Set(Object.values(oe)),Dn={[oe.Act]:N.ACT,[oe.Crawl]:N.CRAWL,[oe.Extract]:N.EXTRACT,[oe.PdfFiller]:N.PDF_FILLER,[oe.CreateCustomTool]:N.CUSTOM_TOOL_GENERATOR,[oe.CreateWebPage]:N.WEBPAGE_GENERATOR,[oe.CreateGoogleDoc]:N.GOOGLE_DOC_GENERATOR,[oe.CreateGoogleSlides]:N.GOOGLE_SLIDES_GENERATOR};function Mn(e){let t=po(e),n=e,r=[...t].sort((o,s)=>s.startIndex-o.startIndex);for(let o of r)n=n.slice(0,o.startIndex)+n.slice(o.endIndex);return n=n.replace(/\s+/g," ").trim(),{originalMessage:e,cleanedMessage:n,functionCalls:t,hasOnlyFunctionCalls:n===""}}function po(e){let t=[],n=/@([\w.]+)\s*\(/g,r;for(;r=n.exec(e);){let o=r.index,s=r[1],{endIndex:a,paramsString:c}=mo(e,o+r[0].length);if(a!==-1){let i=ho(c);t.push({functionName:s,parameters:i,rawExpression:e.substring(o,a+1),startIndex:o,endIndex:a+1}),n.lastIndex=a+1}}return t}function go(e){return On.has(e)}function mo(e,t){let n=1,r=!1,o=!1,s=!1,a=t;for(;a<e.length&&n>0;){let c=e[a];if(s){s=!1,a++;continue}c==="\\"&&(r||o)?s=!0:c==='"'&&!r?o=!o:c==="'"&&!o?r=!r:!r&&!o&&(c==="("?n++:c===")"&&n--),a++}return n===0?{endIndex:a-1,paramsString:e.substring(t,a-1).trim()}:{endIndex:-1,paramsString:""}}function ho(e){if(!e)return{};let t={},n=_o(e);for(let r of n){let o=r.indexOf("=");if(o===-1)t.prompt=Pn(r.trim());else{let s=r.substring(0,o).trim(),a=r.substring(o+1).trim();t[s]=Pn(a)}}return t}function _o(e){let t=[],n="",r=!1,o=!1,s=0,a=0,c=!1;for(let i=0;i<e.length;i++){let u=e[i];if(c){n+=u,c=!1;continue}if(u==="\\"){c=!0,n+=u;continue}if(u==='"'&&!r?o=!o:u==="'"&&!o&&(r=!r),!r&&!o){if(u==="(")s++;else if(u===")")s--;else if(u==="[")a++;else if(u==="]")a--;else if(u===","&&s===0&&a===0){t.push(n.trim()),n="";continue}}n+=u}return n.trim()&&t.push(n.trim()),t}function Pn(e){if(!e)return"";if(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1).replace(/\\"/g,'"').replace(/\\'/g,"'");if(e.startsWith("[")||e.startsWith("{"))try{return JSON.parse(e)}catch{}return/^-?\d+(\.\d+)?$/.test(e)?parseFloat(e):e.toLowerCase()==="true"?!0:e.toLowerCase()==="false"?!1:e}function Nn(e,t){if(go(e))return{isValid:!0,isRequired:!0,isUserDefined:!1,isMcp:!1,mappedFunction:Dn[e]};if(t[e]){let r=t[e];return{isValid:!0,isRequired:!1,isUserDefined:!r.mcpUrl,isMcp:!!r.mcpUrl,functionDef:r}}let n=Object.entries(t).find(([r,o])=>o.mcpUrl?r.split(".").pop()===e:!1);if(n){let[,r]=n;return{isValid:!0,isRequired:!1,isUserDefined:!1,isMcp:!0,functionDef:r}}return{isValid:!1,isRequired:!1,isUserDefined:!1,isMcp:!1,error:`Function "${e}" not found`}}function Un(e,t){if(!t||!t.parameters)return e;let n={};for(let[r,o]of Object.entries(e)){let s=t.parameters?.[r];if(!s||!s.type){n[r]=o;continue}switch(s.type){case"number":case"integer":{let a=Number(o);n[r]=Number.isFinite(a)?a:o;break}case"boolean":{typeof o=="boolean"?n[r]=o:typeof o=="string"?n[r]=o.toLowerCase()==="true":n[r]=!!o;break}case"array":{if(Array.isArray(o))n[r]=o;else if(typeof o=="string")try{let a=JSON.parse(o);n[r]=Array.isArray(a)?a:[a]}catch{n[r]=[o]}else n[r]=[o];break}case"object":{if(typeof o=="object")n[r]=o;else if(typeof o=="string")try{n[r]=JSON.parse(o)}catch{n[r]={value:o}}else n[r]={value:o};break}default:n[r]=o}}return n}var To=new Set(["same_tab_scheduled","same_host_navigated","subdomain_navigated","new_tab_opened","switch_tab"]);function we(e){let t=String(e.navigationOutcome||"").trim().toLowerCase(),n=String(e.navigationMode||"").trim().toLowerCase(),r=e.navigationPending===!0,o=t==="same_tab_scheduled"||r&&!t&&n==="same_tab",s=r||To.has(t);return{isNavigationProgress:s,isSameTabHandoff:o,continuationReason:s?o?"same_tab_navigation_handoff":"loop_continue":null,normalizedOutcome:t,normalizedMode:n}}var bo=["extract","compare","list","across","multiple","many","report","document","spreadsheet","sheet","table","csv","json","pdf","slides"],yo=new Set(["co.uk","org.uk","gov.uk","ac.uk","com.au","net.au","org.au","co.jp","com.br","com.mx","com.sg","co.in"]);function gt(e){let t=String(e||"").trim();if(!t)return"";try{return new URL(t).hostname.toLowerCase()}catch{return""}}function mt(e){let t=String(e||"").trim().toLowerCase().replace(/^\.+/,"");if(!t)return"";if(t==="localhost"||/^\d+\.\d+\.\d+\.\d+$/.test(t))return t;let n=t.split(".").filter(Boolean);if(n.length<2)return t;let r=`${n[n.length-2]}.${n[n.length-1]}`;return n.length>=3&&yo.has(r)?`${n[n.length-3]}.${r}`:r}function So(e,t){let n=String(t?.find(s=>typeof s?.url=="string"&&String(s.url||"").trim())?.url||""),r=mt(gt(n));if(!r)return!1;let o=String(e||"").match(/https?:\/\/[^\s)]+/g)||[];return o.length?o.some(s=>{let a=mt(gt(s));return!!a&&a!==r}):!1}function Ln(e,t){let n=String(t?.find(a=>typeof a?.url=="string"&&String(a.url||"").trim())?.url||""),r=mt(gt(n)),o=String(e||"").match(/https?:\/\/[^\s)]+/g)||[];if(!o.length||!r)return 0;let s=new Set;for(let a of o){let c=mt(gt(a));!c||c===r||s.add(c)}return s.size}function Fn(e){let t=String(e||"").toLowerCase();return t?(t.match(/\b(first|second|third|then|after that|next|finally)\b/g)||[]).length>=2||(t.match(/\bstep\s*[1-9]\b/g)||[]).length>=2||(t.match(/\b\d+\.\s+/g)||[]).length>=2:!1}function pt(e){let t=String(e||"").toLowerCase().trim();if(!t)return 0;let n=0,r=new Set((t.match(/\b(click|open|go|navigate|fill|type|submit|extract|find|search|compare|summarize|collect|download|upload|create|generate|report)\b/g)||[]).map(s=>s.toLowerCase()));t.length>120&&(n+=1),r.size>=2&&(n+=1),(t.match(/\b(and then|then|after|next|finally|first|second|third)\b/g)||[]).length>=1&&(n+=2),(t.match(/\b(extract|compare|list|all|each|every|across|multiple|many)\b/g)||[]).length>=2&&(n+=2),/https?:\/\/|www\./.test(t)&&(n+=2),(t.match(/\b(report|document|doc|spreadsheet|sheet|table|csv|json|pdf|slides|summary)\b/g)||[]).length>=1&&(n+=2);for(let s of bo)t.includes(s)&&(n+=.25);let o=t.split(/\s+/).filter(Boolean);return/^(click|type|fill|open|go to|scroll|press|select)\b/.test(t)&&o.length<=10&&(n=Math.max(0,n-2)),Math.max(0,Math.min(10,Math.round(n)))}function Io(e,t){let n=t.taskRouting?.mode||"act";if(n==="planner")return{mode:"planner",reason:"Configured planner mode"};if(n==="act")return{mode:"act",reason:"Configured act mode"};if(Array.isArray(t.previousSteps)&&t.previousSteps.some(c=>Array.isArray(c?.questionsAsked)&&c.questionsAsked.length>0&&!(c?.userAnswers&&Object.keys(c.userAnswers).length>0)))return{mode:"planner",score:pt(e),reason:"Forced planner due to awaiting_user continuation chain."};if(Fn(e))return{mode:"planner",score:pt(e),reason:"Forced planner due to multi-step dependency markers in prompt."};let o=Ln(e,t.tabs||[]);if(o>1)return{mode:"planner",score:pt(e),reason:`Forced planner due to ${o} cross-domain dependencies.`};let s=pt(e),a=Math.max(3,Math.min(10,Number(t.taskRouting?.actHeuristicThreshold)||7));return s>=a?{mode:"planner",score:s,reason:`Complexity score ${s} >= ${a}`}:{mode:"act",score:s,reason:`Complexity score ${s} < ${a}`}}function Eo(e){if(!e||typeof e!="object"||e.error)return!1;let t=s=>Array.isArray(s)?s.length>0:s&&typeof s=="object"?Object.keys(s).length>0:typeof s=="string"?s.trim().length>0:s!=null;if(t(e.data)||we({navigationPending:e.navigationPending,navigationOutcome:e.navigationOutcome,navigationMode:e.navigation}).isNavigationProgress||e.needsUserInput===!0)return!0;let r=e.output;return r?typeof r=="string"?r.trim().length>0:typeof r!="object"?t(r):r.success===!1||r.error?!1:!!(we({navigationPending:r.navigationPending,navigationOutcome:r.navigationOutcome,navigationMode:r.navigation}).isNavigationProgress||r.needsUserInput===!0||r.waitingForUserInput===!0||Array.isArray(r.questions)&&r.questions.length>0||String(r.taskStatus||"").trim().toLowerCase()==="in_progress"||r.taskComplete===!0||t(r.data)||typeof r.response=="string"&&String(r.response||"").trim()||t(r)):!1}async function wo(e){let{message:t,toolFunctions:n}=e,r=Mn(t),o=[];if(r.functionCalls.length===0)return{processedMessage:t,executedFunctions:[],shouldRunPlanner:!0};let s=r.functionCalls.map(l=>({call:l,validation:Nn(l.functionName,n||{})})),a=s.filter(l=>!l.validation.isValid);if(a.length>0)return{processedMessage:r.cleanedMessage,executedFunctions:[],shouldRunPlanner:!1,error:a.map(l=>l.validation.error).join("; ")};let c=s.every(l=>l.validation.isRequired),i=s.every(l=>l.validation.isUserDefined||l.validation.isMcp);if(r.hasOnlyFunctionCalls&&(c||i)){for(let{call:l,validation:d}of s)if(d.isRequired&&d.mappedFunction){let f={user_input:l.parameters.prompt||l.parameters.user_input||l.parameters.task_instruction||"",...l.parameters},h=await Ie({...e,toolName:d.mappedFunction,toolArgs:f,userInput:f.user_input,tabs:e.tabs,trajectoryId:e.trajectoryId,plannerPrevSteps:e.previousSteps,agentLog:e.agentLog,ctx:e.ctx,bridgeRpc:e.bridgeRpc,functionDeclarations:e.functionDeclarations,onPrevStepsUpdate:e.onPrevStepsUpdate});o.push({name:l.functionName,parameters:l.parameters,result:h.output,error:h.error,isRequired:!0,prevSteps:h.prevSteps})}else if(d.functionDef)try{let f=Un(l.parameters,d.functionDef),h=await e.bridgeRpc("executeClientTool",{name:l.functionName,args:f});o.push({name:l.functionName,parameters:f,result:h,isRequired:!1})}catch(f){o.push({name:l.functionName,parameters:l.parameters,error:f?.message||String(f),isRequired:!1})}return{processedMessage:r.cleanedMessage,executedFunctions:o,shouldRunPlanner:!1}}return{processedMessage:t,executedFunctions:[],shouldRunPlanner:!0}}async function Gn(e,t){t.onStatusUpdate?.("Analyzing request",e,"analyze");let n=await wo({...t,message:e});if(n.error)return{success:!1,processedMessage:n.processedMessage,error:n.error};if(n.executedFunctions.length>0&&!n.shouldRunPlanner)return{success:!0,processedMessage:n.processedMessage,executedFunctions:n.executedFunctions};if(n.shouldRunPlanner){let r=Io(e,t);t.onStatusUpdate?.(`Route selected: ${r.mode}`,r.reason,"route");let o=t.agentLog?.prevSteps;if(r.mode==="act"){t.onStatusUpdate?.("Executing action plan","Using ACT tool loop","execute");let c=Date.now(),i=await Ie({...t,toolName:N.ACT,toolArgs:{user_input:e},userInput:e,tabs:t.tabs,trajectoryId:t.trajectoryId,plannerPrevSteps:t.previousSteps,agentLog:t.agentLog,ctx:t.ctx,bridgeRpc:t.bridgeRpc,functionDeclarations:t.functionDeclarations,onPrevStepsUpdate:t.onPrevStepsUpdate});Array.isArray(i.prevSteps)&&i.prevSteps.length>0&&(o=i.prevSteps,t.onPrevStepsUpdate?.(o));let u=Date.now()-c,l=Array.isArray(i.prevSteps?.[i.prevSteps.length-1]?.functions)?i.prevSteps[i.prevSteps.length-1].functions.length:0,d=Array.isArray(i.prevSteps)?i.prevSteps.reduce((C,F)=>{let R=Array.isArray(F.functions)?F.functions.filter(P=>P?.response?.status==="Failure").length:0;return C+R},0):0,f=So(e,t.tabs||[]),h=Ln(e,t.tabs||[]),y=Fn(e);if(!(!Eo(i)&&(!!i.error&&(t.taskRouting?.plannerOnActError??!0)&&t.taskRouting?.mode!=="act"||u>8e3||l>3||d>=2||h>1||f||y)))return{success:!i.error,processedMessage:n.processedMessage,directToolResult:i,route:r,error:i.error}}let s={...t,userInput:e,continuePlanning:!1,agentLog:{prevSteps:o||t.agentLog?.prevSteps,chatLog:t.agentLog?.chatLog},lastToolPreviousSteps:o||t.lastToolPreviousSteps,ctx:t.ctx,bridgeRpc:t.bridgeRpc,functionDeclarations:t.functionDeclarations,onPrevStepsUpdate:t.onPrevStepsUpdate,onPlannerHistoryUpdate:t.onPlannerHistoryUpdate},a=await ft(s,[]);return{success:!a.response.error,processedMessage:n.processedMessage,plannerResponse:a,route:r,error:a.response.error}}return{success:!0,processedMessage:n.processedMessage}}function $n(e){return!e.resume&&!e.preserveHistory}var te=[],j=null,Z=null,Ce=new Qe,se=[],ie=[],z,ne="",Ue=[],_t="",fe=crypto.randomUUID(),ce=crypto.randomUUID(),ae=[],Me,Re=null,Ro=new Set(Object.values(N)),X=null,re=new Set,Ne=null,Ft="",Pe=new Set,Gt="",ke=new Map,bt=3e4,xo=9e4,Ao=2e4;function vo(e){let t=String(e?.ui?.agent?.name||"").trim();return t?t.slice(0,64):"Rover"}function Co(e){let t=String(e||"").trim();if(t)try{return new URL(t).hostname.toLowerCase()}catch{return}}function ko(e){if(!(!e?.tools||Array.isArray(e.tools)))return e.tools.web}function Oo(e){if(e&&(e.externalNavigationPolicy==="open_new_tab_notice"||e.externalNavigationPolicy==="block"||e.externalNavigationPolicy==="allow"))return e.externalNavigationPolicy}function Do(e){let t=e.tabs.map((n,r)=>{if(!n.external&&n.accessMode!=="external_placeholder"&&n.accessMode!=="external_scraped")return;let o=n.accessMode==="external_scraped"?"external_scraped":"external_placeholder";return{tabId:r,host:Co(n.url),title:String(n.title||"").trim()||void 0,accessMode:o,reason:String(n.inaccessibleReason||"").trim()||void 0}}).filter(n=>!!n).slice(0,8);return{mode:"rover_embed",agentName:e.agentName,externalNavigationPolicy:e.externalNavigationPolicy,tabIdContract:"tree_index_mapped_by_tab_order",taskBoundaryId:e.taskBoundaryId,...t.length?{externalTabs:t}:{}}}function Po(e,t){return t===void 0?e:Array.isArray(t)?t:Array.isArray(e)?{...t,client:t.client??e,web:{...t.web||{}}}:{...e,...t,client:t.client??e?.client,web:{...e?.web||{},...t.web||{}}}}function Mo(e,t){return t?{...e,...t,agent:{...e?.agent||{},...t.agent||{}}}:e}function No(e){let t=new Map;return e.onmessage=n=>{let r=n.data;if(!r||r.t!=="res")return;let o=t.get(r.id);o&&(t.delete(r.id),o(r))},async function(r,o){let s=crypto.randomUUID(),a=new Promise((c,i)=>{let u=setTimeout(()=>{t.delete(s),i(new Error(`RPC timeout: ${r} (${bt}ms)`))},bt);t.set(s,l=>{clearTimeout(u),l.ok?c(l.result):i(new Error(l.error?.message||"RPC error"))})});return e.postMessage({t:"req",id:s,method:r,params:o}),a}}async function Uo(){if(!Z)return{id:1};try{let e=await Z("getTabContext");if(e&&typeof e=="object")return{id:Number(e.logicalTabId||e.id||1),url:e.url,title:e.title,external:!1,accessMode:"live_dom"}}catch{}try{let e=await Z("getPageData");return{id:1,url:e?.url,title:e?.title,external:!1,accessMode:"live_dom"}}catch{return{id:1,external:!1,accessMode:"live_dom"}}}async function Lo(){if(!Z)return[{id:1}];try{let e=await Z("listSessionTabs");if(Array.isArray(e)&&e.length>0){let t=Date.now(),n=e.map(r=>{let o=Number(r?.logicalTabId||r?.id||0),s=!!r?.external;return{id:o,runtimeId:typeof r?.runtimeId=="string"?r.runtimeId:void 0,updatedAt:Number(r?.updatedAt)||0,detachedAt:Number(r?.detachedAt)||0,detachedReason:typeof r?.detachedReason=="string"?r.detachedReason:void 0,url:typeof r?.url=="string"?r.url:void 0,title:typeof r?.title=="string"?r.title:void 0,external:s,accessMode:r?.accessMode==="external_scraped"||r?.accessMode==="external_placeholder"?r.accessMode:s?"external_placeholder":"live_dom",inaccessibleReason:typeof r?.inaccessibleReason=="string"?r.inaccessibleReason:void 0}}).filter(r=>Number.isFinite(r.id)&&r.id>0).filter(r=>{let o=Math.max(Number(r.updatedAt)||0,Number(r.detachedAt)||0);return r.runtimeId?!0:r.external?t-o<=xo:r.detachedReason==="opened_pending_attach"?t-o<=Ao:!1}).map(r=>({id:r.id,url:r.url,title:r.title,external:r.external,accessMode:r.accessMode,inaccessibleReason:r.inaccessibleReason}));if(n.length)return n}}catch{}return[await Uo()]}function Fo(e,t,n){if(n)return n;let r=`${String(e||"")} ${String(t||"")}`.toLowerCase();return r.trim()?/route|routing|complexity/.test(r)?"route":/complete|completed|done|finished|task complete/.test(r)?"complete":/verify|validated|checking|question/.test(r)?"verify":/execute|executing|running|calling|processing|generating|filling|inferring|extracting/.test(r)?"execute":"analyze":"analyze"}function Go(e,t){let n=String(t||e||"").trim();return n?n.length<=120?n:`${n.slice(0,119)}\u2026`:""}function J(e,t,n){let r=Fo(e,t,n),o=Go(e,t),s=X?.runId||"no-run";if(s!=="no-run"&&re.has(s))return;let a=`${s}|${r}|${String(e||"").trim().toLowerCase()}|${o.toLowerCase()}`;if(!(a===Ft||Pe.has(a))){if(Ft=a,Pe.add(a),Pe.size>60){let c=Array.from(Pe).slice(-30);Pe=new Set(c)}self.postMessage({type:"status",message:e,thought:t,stage:r,compactThought:o,runId:X?.runId}),B()}}function $o(e){let t=X?.runId||"no-run";if(t!=="no-run"&&re.has(t))return;let n=[t,e.hasExplicitScope?"1":"0",e.scopedTabIdsInput.join(","),e.listedTabIds.join(","),e.keptScopedTabIds.join(","),e.resolvedTabOrder.join(",")].join("|");n!==Gt&&(Gt=n,self.postMessage({type:"runtime_tabs_diagnostics",runId:X?.runId,diagnostics:e}))}function Xe(e){if(e==null||typeof e=="string"||typeof e=="number"||typeof e=="boolean")return e;try{return structuredClone(e)}catch{try{return JSON.parse(JSON.stringify(e))}catch{return}}}function Jn(e){return e.filter(t=>t?.role==="user").slice(-20).map(t=>({role:"user",content:String(t?.content??"")}))}function Oe(e){if(!Array.isArray(e))return[];if(e.length<=qe.plannerHistory)return e.map(r=>Xe(r)).filter(r=>r!==void 0);let t=[e[0],...e.slice(-(qe.plannerHistory-1))],n=[];for(let r of t){let o=Xe(r);o!==void 0&&n.push(o)}return n}function Hn(e){if(!Array.isArray(e)||e.length===0)return;let t=[];for(let r=0;r<e.length;r+=1){let o=e[r]?.accTreeId;typeof o=="string"&&o.trim()&&t.push(r)}if(t.length<=3)return;let n=new Set([t[0],...t.slice(-2)]);for(let r of t)n.has(r)||delete e[r].accTreeId}function Ye(e){if(!Array.isArray(e))return[];if(e.length<=qe.prevSteps){let r=[];for(let o of e){let s=Xe(o);s&&typeof s=="object"&&r.push(s)}return Hn(r),r}let t=[e[0],...e.slice(-(qe.prevSteps-1))],n=[];for(let r of t){let o=Xe(r);o&&typeof o=="object"&&n.push(o)}return Hn(n),n}function Ho(e,t){if(!e||typeof e!="object")return;let n=String(e.key||e.id||"").trim(),r=String(e.query||e.question||"").trim(),o=n||`clarification_${t+1}`;if(!r)return;let s=typeof e.required=="boolean",a=typeof e.optional=="boolean",c=s?!!e.required:a?!e.optional:!0;return{key:o,query:r,...typeof e.id=="string"&&e.id.trim()?{id:e.id.trim()}:{},...typeof e.question=="string"&&e.question.trim()?{question:e.question.trim()}:{},...Array.isArray(e.choices)?{choices:e.choices}:{},required:c}}function ee(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r=0;r<e.length;r+=1){let o=Ho(e[r],r);if(!o)continue;let s=`${o.key}::${o.query}`.toLowerCase();n.has(s)||(n.add(s),t.push(o))}return t.slice(0,6)}function qn(e){return String(e.query||e.question||"").trim()}function jn(e,t,n){let r=new Set(t.map(i=>i.key)),o={},s=Array.isArray(e?.keys)?e.keys.map(i=>String(i||"").trim()).filter(i=>!!i&&r.has(i)):[];if(e?.answersByKey&&typeof e.answersByKey=="object")for(let[i,u]of Object.entries(e.answersByKey)){if(!r.has(i))continue;let l=String(u||"").trim();l&&(o[i]=l)}let a=String(n||"").trim();if(Object.keys(o).length===0&&a)if(t.length===1)o[t[0].key]=a;else{let i=a.split(`
|
|
11
11
|
`).map(u=>u.trim()).filter(Boolean);for(let u of i){let l=u.indexOf(":");if(l<=0)continue;let d=u.slice(0,l).trim(),f=u.slice(l+1).trim();!d||!f||!r.has(d)||(o[d]=f)}}let c=String(e?.rawText||a||"").trim();return!c&&Object.keys(o).length===0?s.length?{answersByKey:o,rawText:s.map(i=>`${i}: (no answer provided)`).join(`
|
|
12
|
-
`)}:void 0:{answersByKey:o,rawText:c}}function
|
|
13
|
-
`)}function
|
|
14
|
-
`)}function
|
|
15
|
-
`):void 0}if(typeof e=="object"){let t=["response","message","summary","text","content","result","description"];for(let n of t){let r=e[n];if(typeof r=="string"&&r.trim())return r.trim()}return}}}function
|
|
12
|
+
`)}:void 0:{answersByKey:o,rawText:c}}function qo(e,t){let n=["[ASK_USER_ANSWERS]"];for(let r of e){let o=String(t.answersByKey[r.key]||"").trim();n.push(`${r.key}: ${o||"(no answer provided)"}`)}return t.rawText&&(n.push("[RAW_USER_REPLY]"),n.push(t.rawText)),n.join(`
|
|
13
|
+
`)}function he(e){return String(e||"").trim()||void 0}function Le(e){if(!Array.isArray(e))return[];let t=e.map(r=>({role:r?.role==="user"?"user":"model",message:String(r?.message||"").replace(/\s+/g," ").trim()})).filter(r=>!!r.message);if(!t.length)return[];let n=[];for(let r of t){let o=n[n.length-1];o&&o.role===r.role&&o.message===r.message||n.push(r)}return n.slice(-12)}function Ve(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){let o=Number(r);!Number.isFinite(o)||o<=0||t.has(o)||(t.add(o),n.push(o))}return n}function jo(e){let t=Ve(e?.scopedTabIds),n=e?.taskTabScope,r=Ve(n?.touchedTabIds),o=Number(n?.seedTabId),s=Number.isFinite(o)&&o>0?o:void 0,a=Ve(t.length>0?t:r.length>0?r:s?[s]:[]);return s&&!a.includes(s)&&a.unshift(s),{scoped:a,seedTabId:s}}function ht(e){if(!e||typeof e!="object")return;let t=Object.prototype.hasOwnProperty.call(e,"scopedTabIds"),n=Object.prototype.hasOwnProperty.call(e,"taskTabScope");if(!t&&!n)return;let r=jo(e);ae=r.scoped,Me=r.seedTabId}function Nt(e){let t=Ve(Array.isArray(e)?e:[e]);if(!t.length)return ae;let n=Ve([...Number(Me)>0?[Number(Me)]:[],...ae,...t]);return n.length===ae.length&&n.every((r,o)=>r===ae[o])||(ae=n),ae}function Zn(){for(let e of te){if(e.role!=="user")continue;let t=he(String(e.content||""));if(t)return t}}function Wn(e,t,n){let r=String(t||"").trim(),o=String(e||"").trim(),s=[r?`The tool \`${r}\` just finished executing.`:"No tool was issued previously.",`Please analyze the progress based on the complete history and determine the single next best step required to fulfill the overall request: ${o||"(none)"}.`,`If the request is complete, invoke tool \`${N.TASK_COMPLETE}\` via \`tool_code\`. If not, invoke the appropriate tool.`],a=String(n||"").trim();return a&&(s.push("[LAST_TOOL_OUTPUT]"),s.push(a)),s.join(`
|
|
14
|
+
`)}function Wo(e){if(!(!Array.isArray(e)||e.length===0))for(let t=e.length-1;t>=0;t-=1){let n=e[t],r=Array.isArray(n?.functions)?n.functions:[];for(let o=r.length-1;o>=0;o-=1){let s=r[o];if(String(s?.name||"").trim().toLowerCase()==="ask_user")return{stepIndex:t,functionIndex:o}}}}function Bo(e,t){let n=t?.stepRef;if(n&&t?.boundaryId&&t.boundaryId===ce&&Number.isFinite(n.stepIndex)&&n.stepIndex>=0&&Number.isFinite(n.functionIndex)&&n.functionIndex>=0&&n.stepIndex<e.length){let o=e[n.stepIndex],a=(Array.isArray(o?.functions)?o.functions:[])[n.functionIndex];if(String(a?.name||"").trim().toLowerCase()==="ask_user")return{stepIndex:n.stepIndex,functionIndex:n.functionIndex}}let r=[];for(let o=0;o<e.length;o+=1){let s=e[o],a=Array.isArray(s?.functions)?s.functions:[];for(let c=0;c<a.length;c+=1){let i=a[c];String(i?.name||"").trim().toLowerCase()==="ask_user"&&r.push({stepIndex:o,functionIndex:c})}}if(r.length===1)return r[0];if(r.length>1)return r[r.length-1]}function zo(e){let t=Wo(e);if(!t)return;let n=e[t.stepIndex];return{stepIndex:t.stepIndex,functionIndex:t.functionIndex,...typeof n?.accTreeId=="string"&&String(n.accTreeId).trim()?{accTreeId:String(n.accTreeId).trim()}:{}}}function Bn(e,t){let n=zo(ie);return{questions:t,source:e,askedAt:Date.now(),boundaryId:ce,...n?{stepRef:n}:{}}}function Ko(e,t,n){let r=Ye(Array.isArray(e)?e:[]),o=ee(t?.questions);if(!o.length)return r;let s=Bo(r,t),a=ee(o).map(d=>({key:d.key,query:d.query,...d.required===!1?{required:!1}:{}})),c=d=>{let f=d&&typeof d=="object"&&!Array.isArray(d)?d:{},h=ee(f.questions),y=h.length?h:ee(o);return{...f,status:"answered",needsUserInput:!1,...y.length?{questions:y}:{},ask_user_answers:{...n.answersByKey},...n.rawText?{raw_user_reply:n.rawText}:{},answeredAt:Date.now()}};if(!s)return r;let i=r[s.stepIndex];Array.isArray(i.functions)||(i.functions=[]);let l=i.functions[s.functionIndex]?.response?.output;return i.functions[s.functionIndex]={name:"ask_user",args:{questions_to_ask:a},response:{status:"Success",output:c(l)}},r}function Vo(e,t,n){let r=Oe(Array.isArray(e)?e:[]);for(let o=r.length-1;o>=0;o-=1){let s=r[o];if(!s||typeof s!="object")continue;let a=ee(s.questionsAsked);if(!a.length)continue;let c=new Set(a.map(l=>l.key.toLowerCase()));if(!t.some(l=>c.has(String(l.key||"").toLowerCase())))continue;let u=s.userAnswers&&typeof s.userAnswers=="object"&&!Array.isArray(s.userAnswers)?s.userAnswers:{};return s.userAnswers={...u,...n},Oe(r)}return r.push({thought:"User provided clarification answers.",questionsAsked:t,userAnswers:n}),Oe(r)}function Xo(){let e=Ye(Array.isArray(ie)?ie:[]),t=he(ne),n=z?.stepRef,r=n&&Number.isFinite(n.stepIndex)&&n.stepIndex>=0&&Number.isFinite(n.functionIndex)&&n.functionIndex>=0?{stepIndex:n.stepIndex,functionIndex:n.functionIndex,...typeof n.accTreeId=="string"&&n.accTreeId.trim()?{accTreeId:n.accTreeId.trim()}:{}}:void 0;return{trajectoryId:fe,taskBoundaryId:ce,...t?{rootUserInput:t}:{},...Ue.length?{seedChatLog:Le(Ue)}:{},history:Jn(te),plannerHistory:Oe(Array.isArray(se)?se:[]),agentPrevSteps:e,lastToolPreviousSteps:e,pendingAskUser:z?{questions:ee(z.questions),source:z.source,askedAt:Number(z.askedAt)||Date.now(),...typeof z.boundaryId=="string"&&z.boundaryId.trim()?{boundaryId:z.boundaryId.trim()}:{},...r?{stepRef:r}:{}}:void 0}}function B(){self.postMessage({type:"state_snapshot",state:Xo(),activeRun:X?{runId:X.runId,text:X.text,startedAt:X.startedAt,resume:X.resume}:null})}function Yo(e){let t=e;if(!t)return;if(Ue=Le(t.seedChatLog),Array.isArray(t.history)){te.length=0;for(let a of Jn(t.history))te.push(a)}Array.isArray(t.plannerHistory)&&(se=Oe(t.plannerHistory)),Array.isArray(t.agentPrevSteps)?ie=Ye(t.agentPrevSteps):Array.isArray(t.lastToolPreviousSteps)&&(ie=Ye(t.lastToolPreviousSteps));let n=ee(t.pendingAskUser?.questions),r=t.pendingAskUser?.stepRef,o=r&&Number.isFinite(Number(r.stepIndex))&&Number(r.stepIndex)>=0&&Number.isFinite(Number(r.functionIndex))&&Number(r.functionIndex)>=0?{stepIndex:Number(r.stepIndex),functionIndex:Number(r.functionIndex),...typeof r.accTreeId=="string"&&r.accTreeId.trim()?{accTreeId:r.accTreeId.trim()}:{}}:void 0;n.length>0?z={questions:n,source:t.pendingAskUser?.source==="planner"?"planner":"act",askedAt:Number(t.pendingAskUser?.askedAt)||Date.now(),boundaryId:typeof t.pendingAskUser?.boundaryId=="string"&&String(t.pendingAskUser.boundaryId).trim()||void 0,...o?{stepRef:o}:{}}:z=void 0,typeof t.trajectoryId=="string"&&t.trajectoryId.trim()&&(fe=t.trajectoryId.trim()),typeof t.taskBoundaryId=="string"&&String(t.taskBoundaryId).trim()&&(ce=String(t.taskBoundaryId).trim()),ne=he(t.rootUserInput)||he(Zn())||"",Re||(Re=new pe(`rover-${fe}`)),B()}function Qo(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(!n||typeof n!="object")continue;let r=n.type;if(r==="text"){let o=String(n.text||"").trim();if(!o)continue;t.push({type:"text",text:o});continue}(r==="tool_output"||r==="json")&&t.push({type:r,data:_e(n.data),label:typeof n.label=="string"?n.label:void 0,toolName:typeof n.toolName=="string"?n.toolName:void 0})}return t.length?t:void 0}function _e(e){let t=Xe(e);return t==null?null:typeof t=="string"||typeof t=="number"||typeof t=="boolean"||Array.isArray(t)||typeof t=="object"?t:String(t)}function Fe(e){if(e!=null){if(typeof e=="string")return e.trim()||void 0;if(typeof e=="number"||typeof e=="boolean")return String(e);if(Array.isArray(e)){let t=[];for(let n of e.slice(0,4)){let r=Fe(n);if(r&&t.push(r),t.length>=3)break}return t.length?t.join(`
|
|
15
|
+
`):void 0}if(typeof e=="object"){let t=["response","message","summary","text","content","result","description"];for(let n of t){let r=e[n];if(typeof r=="string"&&r.trim())return r.trim()}return}}}function zn(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=Object.entries(e).filter(([,s])=>s!=null);if(t.length!==1)return!1;let[n,r]=t[0];return typeof r!="string"||!r.trim()?!1:new Set(["response","message","summary","text","content","result","description"]).has(n)}function $t(e,t){if(e==null)return!1;if(typeof e=="string"){let n=e.trim();return n?!t||n!==t.trim():!1}if(Array.isArray(e)){let n=e.filter(r=>r!=null);if(n.length===1){let r=n[0];if(typeof r=="string"||typeof r=="number"||typeof r=="boolean"||zn(r))return!1}return!0}return!zn(e)}function Jo(e,t){let n=Fe(e),r=n||t?.fallbackText||"",o=[];return $t(e,n)&&o.push({type:"tool_output",label:t?.label,toolName:t?.toolName,data:_e(e)}),{text:r,blocks:o.length?o:void 0}}function de(e){let t=typeof e=="string"?String(e||"").trim():String(e?.text||"").trim(),n=typeof e=="string"?void 0:Qo(e.blocks),r=n?.find(c=>c.type==="text"),o=n?.find(c=>c.type==="tool_output"||c.type==="json"),s=t||r?.text||Fe(o?.data)||"";if(!s&&(!n||n.length===0))return"";let a=X?.runId;return a&&re.has(a)||self.postMessage({type:"assistant",text:s,blocks:n,runId:a}),s}function Zo(e){let t=new Set,n=[];for(let r of e)!r?.name||t.has(r.name)||(t.add(r.name),n.push(r));return n}function es(e){return e.filter(t=>!!t?.name&&!Ro.has(t.name))}function Tt(e){let t=X?.runId;if(t&&re.has(t))return;let n=e&&typeof e=="object"&&e.code&&e.message?Y({errorDetails:e},"Rover API key is required."):Y(e,"Rover API key is required.");self.postMessage({type:"auth_required",error:n,runId:t})}var ts=new Set(["goto_url","google_search","go_back","go_forward","refresh_page","open_new_tab"]);function yt(e,t="Operation failed"){let n=Y(e,t);return{success:!1,error:{code:n.code,message:n.message,missing:n.missing,next_action:n.next_action,retryable:n.retryable,requires_api_key:n.requires_api_key},missing:n.missing,next_action:n.next_action,retryable:n.retryable}}function ns(e){if(!e||typeof e!="object")return;let t=e.output;if(t&&typeof t=="object"&&t.success===!1&&t.error){let n=typeof t.error=="object"?t.error:{message:String(t.error||"Operation failed")};return yt({errorDetails:{...n,missing:t.missing??n.missing,next_action:t.next_action??n.next_action,retryable:t.retryable??n.retryable}},"Operation failed")}if(e.errorDetails||e.error)return yt(e.errorDetails||{message:e.error},"Operation failed")}function rs(e){if(!Array.isArray(e)||e.length===0)return!1;let t=0;for(let n=e.length-1;n>=0;n-=1){let r=e[n],o=Array.isArray(r?.functions)?r.functions:[];if(o.length){t+=1;for(let s=o.length-1;s>=0;s-=1){let a=o[s],c=String(a?.name||a?.toolName||a?.functionName||"").trim();if(!c||!ts.has(c))continue;if(String(a?.response?.status||a?.status||"").trim().toLowerCase()==="success")return!0}if(t>=2)break}}return!1}var os=new Set(["UNKNOWN_ERROR","MISSING_AUTH_TOKEN","MISSING_AUTH","SESSION_TOKEN_EXPIRED","SESSION_TOKEN_INVALID","BOOTSTRAP_REQUIRED"]);function ss(e,t){let n=String(e?.error?.code||"").trim().toUpperCase();return n&&!os.has(n)||!rs(t)?e:{...e,error:{...e.error,code:"NAVIGATION_HANDOFF_PENDING",message:e.error?.message||"Navigation handoff is in progress.",retryable:!0,next_action:"Wait for post-navigation resume and continue the task."},retryable:!0,next_action:"Wait for post-navigation resume and continue the task."}}function Ut(e){if(!e||typeof e!="object")return;let t=e.output,n=e.errorDetails,r=t?.policy_action||t?.policyAction||(t?.policyBlocked?"open_new_tab_notice":void 0)||(n?.code==="DOMAIN_SCOPE_BLOCKED"?"block":void 0);r&&self.postMessage({type:"navigation_guardrail",runId:X?.runId,blockedUrl:t?.blocked_url||t?.url||n?.details?.blockedUrl,currentUrl:t?.current_url||n?.details?.currentUrl,reason:t?.error?.message||n?.message||t?.message,policyAction:r,openedInNewTab:!!t?.openedInNewTab,allowedDomains:t?.allowed_domains||n?.details?.allowedDomains})}function as(e){let t=String(e||"").toLowerCase();if(!t.trim())return{blocked:!1,score:0,reasons:[]};let n=[{reason:"prompt_injection",pattern:/\b(ignore|bypass|override)\b.{0,40}\b(instruction|policy|guardrail|system|developer)\b/i,weight:2},{reason:"secret_exfiltration",pattern:/\b(token|cookie|password|secret|api key|session key)\b.{0,40}\b(extract|dump|reveal|steal|exfiltrat)/i,weight:3},{reason:"credential_harvest",pattern:/\b(phish|credential|login prompt|social engineering)\b/i,weight:3},{reason:"policy_evasion",pattern:/\b(do not tell|without asking|silently|hidden|covert)\b/i,weight:1}],r=[],o=0;for(let a of n)a.pattern.test(t)&&(r.push(a.reason),o+=a.weight);return{blocked:o>=3,score:o,reasons:r}}function Ke(e,t){!Array.isArray(e)||!e.length||(ie=Ye(e),t?.snapshot!==!1&&B())}function is(e){let t=[],n=e?.generatedContentRef||{},r=Array.isArray(n.docs)?n.docs:[];for(let i of r)i?.url&&t.push(`[Doc: ${i.url}](${i.url})`);let o=Array.isArray(n.slides)?n.slides:[];for(let i of o)i?.url&&t.push(`[Slides: ${i.url}](${i.url})`);let s=Array.isArray(n.webpages)?n.webpages:[];for(let i of s){let u=i?.storageUrl||i?.downloadUrl;u&&t.push(`[Webpage: ${u}](${u})`)}let a=Array.isArray(n.pdfs)?n.pdfs:[];for(let i of a){let u=i?.storageUrl||i?.downloadUrl;u&&t.push(`[PDF: ${u}](${u})`)}let c=Array.isArray(e?.schemaHeaderSheetInfo)?e.schemaHeaderSheetInfo:[];for(let i of c){let u=i?.sheetInfo?.sheetId;if(!u)continue;let l=i?.sheetInfo?.sheetTabId,d=l?`https://docs.google.com/spreadsheets/d/${u}/edit#gid=${l}`:`https://docs.google.com/spreadsheets/d/${u}/edit`;t.push(`[Sheet: ${d}](${d})`)}return t}function cs(e){if(!Array.isArray(e)||!e.length)return;let t=[];for(let n=0;n<e.length;n+=1){let r=e[n];if(!r)continue;let o=`Step ${n+1}`,s=r.output??r.generatedContentRef??r.schemaHeaderSheetInfo,a=Fe(s);s!==void 0&&$t(s,a)&&t.push({type:"tool_output",label:r.toolName?`${o}: ${r.toolName}`:o,toolName:typeof r.toolName=="string"?r.toolName:void 0,data:_e(s)}),(r.error||r.errorDetails)&&t.push({type:"json",label:`${o} error`,data:_e({error:r.error,errorDetails:r.errorDetails})});let c=is(r);c.length&&t.push({type:"text",text:`${o} artifacts:
|
|
16
16
|
${c.map(i=>`- ${i}`).join(`
|
|
17
|
-
`)}`})}return t.length?t:void 0}function
|
|
17
|
+
`)}`})}return t.length?t:void 0}function us(e){if(!Array.isArray(e)||!e.length)return;let t=[];for(let n=0;n<e.length;n+=1){let r=e[n];if(!r)continue;let o=r.output??r.generatedContentRef??r.schemaHeaderSheetInfo,s=Fe(o);if(s&&(t.push(s),t.length>=3))break}if(t.length)return t.join(`
|
|
18
18
|
|
|
19
|
-
`)}function es(e){if(!(!Array.isArray(e)||!e.length))for(let t=e.length-1;t>=0;t-=1){let n=e[t]?.prevSteps;if(Array.isArray(n)&&n.length>0)return n}}async function ts(e,t=1e4){if(!ee)return{ready:!1,attached:!1,external:!!e.external};let n=500,r=Date.now();for(;Date.now()-r<t;){try{let o=await ee("listSessionTabs");if(Array.isArray(o)){let s=o.find(a=>Number(a?.logicalTabId)===e.logicalTabId);if(s?.external)return{ready:!0,attached:!1,external:!0};if(s?.runtimeId)return await new Promise(a=>setTimeout(a,1e3)),{ready:!0,attached:!0,external:!1}}}catch{}await new Promise(o=>setTimeout(o,n))}return{ready:!1,attached:!1,external:!!e.external}}function ns(e){if(!e||typeof e!="object")return;let t=e.output??e;if(t?.openedInNewTab&&typeof t?.logicalTabId=="number")return{logicalTabId:t.logicalTabId,url:typeof t?.url=="string"?t.url:void 0,external:t?.external===!0}}function Hn(e){if(!e||typeof e!="object")return[];let t=e.output&&typeof e.output=="object"?e.output:void 0,n=[Number(e.logicalTabId??e.logical_tab_id??e.tabId??e.tab_id),Number(t?.logicalTabId??t?.logical_tab_id??t?.tabId??t?.tab_id)],r=new Set,o=[];for(let s of n)!Number.isFinite(s)||s<=0||r.has(s)||(r.add(s),o.push(s));return o}function Ft(e){if(!e||typeof e!="object")return;let t=te(e.questions);if(t.length)return t;let n=e.output,r=te(n&&typeof n=="object"?n.questions:void 0);if(r.length)return r}function rs(e){if(!Array.isArray(e)||e.length===0)return[];let t=[],n=new Set;for(let r of e){let o=Ft(r);if(!(!o||!o.length))for(let s of o){let a=`${s.key}::${s.query}`.toLowerCase();n.has(a)||(n.add(a),t.push(s))}}return t.slice(0,6)}function os(e){if(!Array.isArray(e)||e.length===0)return{failed:!1,needsUserInput:!1,navigationPending:!1,sameTabNavigationPending:!1};let t=!1,n=!1,r=!1,o=!1;for(let s of e){if(!s||typeof s!="object")continue;if(s.error||s.errorDetails){t=!0;continue}let a=s.output&&typeof s.output=="object"?s.output:void 0;if(!a)continue;let c=Se({navigationPending:a.navigationPending,navigationOutcome:a.navigationOutcome,navigationMode:a.navigation});c.isNavigationProgress&&(r=!0,c.continuationReason==="same_tab_navigation_handoff"&&(o=!0));let i=String(a.taskStatus||a.status||"").trim().toLowerCase();(i==="failure"||i==="failed"||i==="error")&&(t=!0),(i==="waiting_input"||i==="needs_input"||i==="pending_user_input")&&(n=!0),(a.needsUserInput===!0||a.waitingForUserInput===!0)&&(n=!0),te(a.questions).length>0&&(n=!0)}return{failed:t,needsUserInput:n,navigationPending:r,sameTabNavigationPending:o}}function ss(e){if(!e||typeof e!="object")return{taskComplete:!0,terminalState:"completed",contextResetRecommended:!0};let t=Se({navigationPending:e.navigationPending,navigationOutcome:e.navigationOutcome,navigationMode:e.navigation});if(t.isNavigationProgress)return{taskComplete:!1,terminalState:"in_progress",navigationPending:t.continuationReason==="same_tab_navigation_handoff",continuationReason:t.continuationReason||"loop_continue"};let n=Ft(e);if(e.error)return{taskComplete:!1,terminalState:"failed"};let r=e.output;if(r&&typeof r=="object"){let o=r,s=String(e.status||"").trim().toLowerCase();if(s==="failure"||s==="failed"||s==="error")return{taskComplete:!1,terminalState:"failed"};if(s==="waiting_input"||s==="needs_input"||s==="pending_user_input")return{taskComplete:!1,needsUserInput:!0,questions:n,terminalState:"waiting_input",continuationReason:"awaiting_user"};let a=Se({navigationPending:o.navigationPending,navigationOutcome:o.navigationOutcome,navigationMode:o.navigation});if(a.isNavigationProgress)return{taskComplete:!1,terminalState:"in_progress",navigationPending:a.continuationReason==="same_tab_navigation_handoff",continuationReason:a.continuationReason||"loop_continue",contextResetRecommended:!1};if(o.needsUserInput===!0||o.waitingForUserInput===!0)return{taskComplete:!1,needsUserInput:!0,questions:n,terminalState:"waiting_input",continuationReason:"awaiting_user"};if(Array.isArray(o.questions)&&o.questions.length>0)return{taskComplete:!1,needsUserInput:!0,questions:n,terminalState:"waiting_input",continuationReason:"awaiting_user"};if(o.error||o.success===!1)return{taskComplete:!1,terminalState:"failed"};let c=String(o.taskStatus||o.status||"").toLowerCase();if(c){if(c==="waiting_input"||c==="needs_input"||c==="pending_user_input")return{taskComplete:!1,needsUserInput:!0,terminalState:"waiting_input",continuationReason:"awaiting_user"};if(c==="failure"||c==="failed"||c==="error")return{taskComplete:!1,terminalState:"failed"}}}return{taskComplete:!0,terminalState:"completed",contextResetRecommended:!0}}function qn(e){if(!e||typeof e!="object")return{taskComplete:!0,needsUserInput:!1,terminalState:"completed",continuationReason:void 0,contextResetRecommended:!0};let t=e.needsUserInput===!0,n=String(e.terminalState||"").trim().toLowerCase(),r=n==="waiting_input"||n==="in_progress"||n==="completed"||n==="failed"?n:t?"waiting_input":e.taskComplete===!0?"completed":e.taskComplete===!1?"in_progress":"completed",o=r==="waiting_input"||t,s=r==="completed"||e.taskComplete===!0&&!o,a=te(e.questions),c=String(e.continuationReason||"").trim().toLowerCase(),i=c==="loop_continue"||c==="same_tab_navigation_handoff"||c==="awaiting_user"?c:o?"awaiting_user":e.navigationPending===!0?"same_tab_navigation_handoff":r==="in_progress"&&!s?"loop_continue":void 0,u=e.contextResetRecommended===!0||r==="completed"||r==="failed";return{route:e.route,taskComplete:s,needsUserInput:o,questions:a.length?a:void 0,terminalState:r,continuationReason:i,contextResetRecommended:u}}function Nt(e,t){for(ve.set(e,t);ve.size>20;){let n=ve.keys().next().value;if(!n)break;ve.delete(n)}}function as(e){for(re.add(e);re.size>20;){let t=re.values().next().value;if(!t)break;re.delete(t)}}function Ae(e){if(e&&re.has(e))throw new DOMException("Run cancelled","AbortError")}function jn(e){ne.length=0,se=[],ie=[],z=void 0,Ie=""}async function Wn(e){let t=ns(e);if(t){Z("Waiting for new tab to load...",void 0,"execute");let n=await ts(t);return{openedTab:t,readyState:n}}return{}}async function is(e,t){if(!q)throw new Error("Worker not initialized");if(!ee)throw new Error("Bridge RPC not initialized");let n=V?.runId;Ae(n),Z("Analyzing request",e,"analyze");let r=t?.resume&&ne.length>0&&ne[ne.length-1]?.role==="user"&&ne[ne.length-1]?.content===e,o=String(e||"").trim();if(q.external?.adversarialGate==="pre_tool_block"){let h=Vo(o);if(h.blocked)return le("I can\u2019t run that request because it appears adversarial. Please rephrase with a safe, task-focused instruction."),Z("Blocked unsafe request",h.reasons.join(", ")||"adversarial_input","complete"),K(),{taskComplete:!1,needsUserInput:!1,terminalState:"failed",contextResetRecommended:!0}}let s=z&&z.boundaryId&&z.boundaryId!==ce?void 0:z;!s&&z&&(z=void 0);let a=ke(Xn()),c=ke(Ie)||a;c&&(Ie=c),!s?.questions?.length&&o&&!t?.resume&&(Ie=o);let i=e,u=e,l=!1;if(s?.questions?.length){let h=Co(t?.askUserAnswers,s.questions,e);if(h){l=!0;let p=ko(s.questions,h),g=ke(Ie)||o||a||"";g&&(Ie=g),i=Po(g,"ask_user",p),u=g||e,s.source==="planner"&&(se=Lo(se,s.questions,h.answersByKey)),We(Uo(ie,s,h),{snapshot:!1}),z=void 0,K()}}!r&&!l&&(ne.push({role:"user",content:e}),K()),Ae(n);let d=await wo();Ae(n);let f=d.length>0?d:[{id:1,external:!1,accessMode:"live_dom"}],m=await ue(ee,f,{scopedTabIds:ae,seedTabId:De,onDiagnostics:h=>{xo(h)}});Ae(n);let T=new Map(d.map(h=>[h.id,h])),k=m.tabOrder.map(h=>{let p=T.get(h);if(p)return p;let g=m.tabMetaById[h];if(!g)return{id:h};let w=!!g.external;return{id:h,url:g.url,title:g.title,external:w,accessMode:g.accessMode||(w?"external_placeholder":"live_dom"),inaccessibleReason:g.inaccessibleReason}}).filter(h=>Number.isFinite(h.id)&&h.id>0),b=k.length>0?k:f;k.length===0&&Z("Using fallback tab mapping",`active=${m.activeTabId}; order=${m.tabOrder.join(",")||"none"}`,"analyze"),Ee||(Ee=new de(`rover-${me}`));let A=mo(q),O=bo({tabs:b,agentName:A,externalNavigationPolicy:To(q),taskBoundaryId:ce}),S=Jt({...q,signal:Ne?.signal,sessionId:gt||q.sessionId||me,activeRunId:n,runtimeContext:O,tools:{web:_o(q)}},ee,Ee);S.isCancelled=()=>!!(n&&re.has(n));let y=qo(jo(xe.getFunctionDeclarations())),v=xe.getToolFunctions(),M=Math.max(1,Math.min(4,Math.floor(Number(q.chat?.resumeFollowup?.maxTurns)||Kn))),H=_t(t?.followupChatLog),F=Mn({resume:t?.resume,preserveHistory:t?.preserveHistory,resumeFollowupMode:q.chat?.resumeFollowup?.mode})?Yo(ne,u,M):Un({resume:t?.resume,followupChatLogLength:H.length})?H:[],R=h=>{We(h,{snapshot:!0})},x=h=>{se=Ce(Array.isArray(h)?h:[]),K()},L=()=>({scopedTabIds:[...ae],seedTabId:De}),P=h=>{Pt(h)};Ae(n);let _=await Dn(i,{tabs:b,scopedTabIds:ae,seedTabId:De,getScopedTabRuntimeContext:L,onScopedTabIdsTouched:P,previousMessages:ne,trajectoryId:me,files:[],recordingContext:q.recordingContext,previousSteps:se,onStatusUpdate:Z,toolFunctions:v,agentLog:{prevSteps:ie,chatLog:F},lastToolPreviousSteps:ie,taskRouting:t?.routing?{...q.taskRouting,mode:t.routing}:q.taskRouting,ctx:S,bridgeRpc:ee,functionDeclarations:y,onPrevStepsUpdate:R,onPlannerHistoryUpdate:x});if(Ae(n),_.directToolResult&&Pt(Hn(_.directToolResult)),Array.isArray(_.executedFunctions)&&_.executedFunctions.length>0)for(let h of _.executedFunctions)Pt(Hn(h?.result));if(!_.success){let h=Tt(_.error,"Something went wrong."),p=Xo(h,ie),g=String(p.error.code||"").trim().toUpperCase();if(!!p.error.retryable||g==="STALE_SEQ"||g==="STALE_EPOCH"||g==="SESSION_TOKEN_EXPIRED"||g==="NAVIGATION_HANDOFF_PENDING"){let I=`${p.error.code}: ${p.error.message}`;return le(I),Z("Waiting for navigation/session sync",p.error.message,"verify"),K(),{route:_.route,taskComplete:!1,terminalState:"in_progress",continuationReason:"loop_continue",contextResetRecommended:!1}}return p.error.requires_api_key&&mt(p.error),le({text:`${p.error.code}: ${p.error.message}`,blocks:[{type:"json",label:"Error details",data:ge(p)}]}),Z("Execution failed",p.error.message,"complete"),K(),{route:_.route,taskComplete:!1,terminalState:"failed"}}if(_.executedFunctions?.length){for(let C of _.executedFunctions)We(C.prevSteps,{snapshot:!1});let h=[],p=[],g=!1,w=!1,I=!1,N=!1,E=!1,D=[];for(let C of _.executedFunctions){let $=Me(C.result);if(C.result!==void 0&&Lt(C.result,$)&&h.push({type:"tool_output",toolName:C.name,label:`${C.name} output`,data:ge(C.result)}),C.error&&h.push({type:"json",label:`${C.name} error`,data:ge({error:C.error})}),p.push($?`@${C.name}: ${$}`:`@${C.name}: ${C.error||"ok"}`),C.error){g=!0;continue}let G=C.result;if(!G||typeof G!="object")continue;let j=Array.isArray(G)?G.find(Gt=>Gt&&typeof Gt=="object"):G;if(!j)continue;let J=j.taskComplete;typeof J=="boolean"&&J&&(w=!0);let Oe=Se({navigationPending:j.navigationPending,navigationOutcome:j.navigationOutcome,navigationMode:j.navigation});Oe.isNavigationProgress&&(I=!0,Oe.continuationReason==="same_tab_navigation_handoff"&&(N=!0));let W=String(j.taskStatus||j.status||"").trim().toLowerCase();(W==="failed"||W==="error"||W==="failure")&&(g=!0),(W==="waiting_input"||W==="needs_input"||W==="pending_user_input")&&(E=!0),(W==="completed"||W==="complete"||W==="done"||W==="success")&&(w=!0),(j.needsUserInput===!0||j.waitingForUserInput===!0)&&(E=!0);let Xe=Ft(j);Xe?.length&&(E=!0,D=te([...D,...Xe]))}return le({text:p.join(`
|
|
20
|
-
`),blocks:
|
|
21
|
-
`);return
|
|
22
|
-
${
|
|
23
|
-
`);return
|
|
24
|
-
${
|
|
19
|
+
`)}function ls(e){if(!(!Array.isArray(e)||!e.length))for(let t=e.length-1;t>=0;t-=1){let n=e[t]?.prevSteps;if(Array.isArray(n)&&n.length>0)return n}}async function ds(e,t=1e4){if(!Z)return{ready:!1,attached:!1,external:!!e.external};let n=500,r=Date.now();for(;Date.now()-r<t;){try{let o=await Z("listSessionTabs");if(Array.isArray(o)){let s=o.find(a=>Number(a?.logicalTabId)===e.logicalTabId);if(s?.external)return{ready:!0,attached:!1,external:!0};if(s?.runtimeId)return await new Promise(a=>setTimeout(a,1e3)),{ready:!0,attached:!0,external:!1}}}catch{}await new Promise(o=>setTimeout(o,n))}return{ready:!1,attached:!1,external:!!e.external}}function fs(e){if(!e||typeof e!="object")return;let t=e.output??e;if(t?.openedInNewTab&&typeof t?.logicalTabId=="number")return{logicalTabId:t.logicalTabId,url:typeof t?.url=="string"?t.url:void 0,external:t?.external===!0}}function Kn(e){if(!e||typeof e!="object")return[];let t=e.output&&typeof e.output=="object"?e.output:void 0,n=[Number(e.logicalTabId??e.logical_tab_id??e.tabId??e.tab_id),Number(t?.logicalTabId??t?.logical_tab_id??t?.tabId??t?.tab_id)],r=new Set,o=[];for(let s of n)!Number.isFinite(s)||s<=0||r.has(s)||(r.add(s),o.push(s));return o}function Ht(e){if(!e||typeof e!="object")return;let t=ee(e.questions);if(t.length)return t;let n=e.output,r=ee(n&&typeof n=="object"?n.questions:void 0);if(r.length)return r}function ps(e){if(!Array.isArray(e)||e.length===0)return[];let t=[],n=new Set;for(let r of e){let o=Ht(r);if(!(!o||!o.length))for(let s of o){let a=`${s.key}::${s.query}`.toLowerCase();n.has(a)||(n.add(a),t.push(s))}}return t.slice(0,6)}function gs(e){if(!Array.isArray(e)||e.length===0)return{failed:!1,needsUserInput:!1,navigationPending:!1,sameTabNavigationPending:!1};let t=!1,n=!1,r=!1,o=!1;for(let s of e){if(!s||typeof s!="object")continue;if(s.error||s.errorDetails){t=!0;continue}let a=s.output&&typeof s.output=="object"?s.output:void 0;if(!a)continue;let c=we({navigationPending:a.navigationPending,navigationOutcome:a.navigationOutcome,navigationMode:a.navigation});c.isNavigationProgress&&(r=!0,c.continuationReason==="same_tab_navigation_handoff"&&(o=!0));let i=String(a.taskStatus||a.status||"").trim().toLowerCase();(i==="failure"||i==="failed"||i==="error")&&(t=!0),(i==="waiting_input"||i==="needs_input"||i==="pending_user_input")&&(n=!0),(a.needsUserInput===!0||a.waitingForUserInput===!0)&&(n=!0),ee(a.questions).length>0&&(n=!0)}return{failed:t,needsUserInput:n,navigationPending:r,sameTabNavigationPending:o}}function ms(e){if(!e||typeof e!="object")return{taskComplete:!0,terminalState:"completed",contextResetRecommended:!0};let t=we({navigationPending:e.navigationPending,navigationOutcome:e.navigationOutcome,navigationMode:e.navigation});if(t.isNavigationProgress)return{taskComplete:!1,terminalState:"in_progress",navigationPending:t.continuationReason==="same_tab_navigation_handoff",continuationReason:t.continuationReason||"loop_continue"};let n=Ht(e);if(e.error)return{taskComplete:!1,terminalState:"failed"};let r=e.output;if(r&&typeof r=="object"){let o=r,s=String(e.status||"").trim().toLowerCase();if(s==="failure"||s==="failed"||s==="error")return{taskComplete:!1,terminalState:"failed"};if(s==="waiting_input"||s==="needs_input"||s==="pending_user_input")return{taskComplete:!1,needsUserInput:!0,questions:n,terminalState:"waiting_input",continuationReason:"awaiting_user"};let a=we({navigationPending:o.navigationPending,navigationOutcome:o.navigationOutcome,navigationMode:o.navigation});if(a.isNavigationProgress)return{taskComplete:!1,terminalState:"in_progress",navigationPending:a.continuationReason==="same_tab_navigation_handoff",continuationReason:a.continuationReason||"loop_continue",contextResetRecommended:!1};if(o.needsUserInput===!0||o.waitingForUserInput===!0)return{taskComplete:!1,needsUserInput:!0,questions:n,terminalState:"waiting_input",continuationReason:"awaiting_user"};if(Array.isArray(o.questions)&&o.questions.length>0)return{taskComplete:!1,needsUserInput:!0,questions:n,terminalState:"waiting_input",continuationReason:"awaiting_user"};if(o.error||o.success===!1)return{taskComplete:!1,terminalState:"failed"};let c=String(o.taskStatus||o.status||"").toLowerCase();if(c){if(c==="waiting_input"||c==="needs_input"||c==="pending_user_input")return{taskComplete:!1,needsUserInput:!0,terminalState:"waiting_input",continuationReason:"awaiting_user"};if(c==="failure"||c==="failed"||c==="error")return{taskComplete:!1,terminalState:"failed"}}}return{taskComplete:!0,terminalState:"completed",contextResetRecommended:!0}}function Vn(e){if(!e||typeof e!="object")return{taskComplete:!0,needsUserInput:!1,terminalState:"completed",continuationReason:void 0,contextResetRecommended:!0};let t=e.needsUserInput===!0,n=String(e.terminalState||"").trim().toLowerCase(),r=n==="waiting_input"||n==="in_progress"||n==="completed"||n==="failed"?n:t?"waiting_input":e.taskComplete===!0?"completed":e.taskComplete===!1?"in_progress":"completed",o=r==="waiting_input"||t,s=r==="completed"||e.taskComplete===!0&&!o,a=ee(e.questions),c=String(e.continuationReason||"").trim().toLowerCase(),i=c==="loop_continue"||c==="same_tab_navigation_handoff"||c==="awaiting_user"?c:o?"awaiting_user":e.navigationPending===!0?"same_tab_navigation_handoff":r==="in_progress"&&!s?"loop_continue":void 0,u=e.contextResetRecommended===!0||r==="completed"||r==="failed";return{route:e.route,taskComplete:s,needsUserInput:o,questions:a.length?a:void 0,terminalState:r,continuationReason:i,contextResetRecommended:u}}function Lt(e,t){for(ke.set(e,t);ke.size>20;){let n=ke.keys().next().value;if(!n)break;ke.delete(n)}}function hs(e){for(re.add(e);re.size>20;){let t=re.values().next().value;if(!t)break;re.delete(t)}}function ve(e){if(e&&re.has(e))throw new DOMException("Run cancelled","AbortError")}function Xn(e){te.length=0,se=[],ie=[],z=void 0,ne="",Ue=[]}async function Yn(e){let t=fs(e);if(t){J("Waiting for new tab to load...",void 0,"execute");let n=await ds(t);return{openedTab:t,readyState:n}}return{}}async function _s(e,t){if(!j)throw new Error("Worker not initialized");if(!Z)throw new Error("Bridge RPC not initialized");let n=X?.runId;ve(n),J("Analyzing request",e,"analyze");let r=t?.resume&&te.length>0&&te[te.length-1]?.role==="user"&&te[te.length-1]?.content===e,o=String(e||"").trim();if(j.external?.adversarialGate==="pre_tool_block"){let p=as(o);if(p.blocked)return de("I can\u2019t run that request because it appears adversarial. Please rephrase with a safe, task-focused instruction."),J("Blocked unsafe request",p.reasons.join(", ")||"adversarial_input","complete"),B(),{taskComplete:!1,needsUserInput:!1,terminalState:"failed",contextResetRecommended:!0}}let s=z&&z.boundaryId&&z.boundaryId!==ce?void 0:z;!s&&z&&(z=void 0);let a=he(Zn()),c=he(ne)||a,i=!!(t?.askUserAnswers&&typeof t.askUserAnswers=="object");c&&(ne=c),!s?.questions?.length&&o&&!t?.resume&&!i&&(ne=o);let u=e,l=!1;if(s?.questions?.length){let p=jn(t?.askUserAnswers,s.questions,e);if(p){l=!0;let m=qo(s.questions,p),T=he(ne)||o||a||"";T&&(ne=T),u=Wn(T,"ask_user",m),s.source==="planner"&&(se=Vo(se,s.questions,p.answersByKey)),Ke(Ko(ie,s,p),{snapshot:!1}),z=void 0,B()}}else if(i){let p=jn(t?.askUserAnswers,[],e),m=he(ne)||a||"";m?(ne=m,u=Wn(m,"ask_user",p?.rawText||o)):o&&(ne=o)}!r&&!l&&(te.push({role:"user",content:e}),B()),ve(n);let d=await Lo();ve(n);let f=d.length>0?d:[{id:1,external:!1,accessMode:"live_dom"}],h=await le(Z,f,{scopedTabIds:ae,seedTabId:Me,onDiagnostics:p=>{$o(p)}});ve(n);let y=new Map(d.map(p=>[p.id,p])),v=h.tabOrder.map(p=>{let m=y.get(p);if(m)return m;let T=h.tabMetaById[p];if(!T)return{id:p};let g=!!T.external;return{id:p,url:T.url,title:T.title,external:g,accessMode:T.accessMode||(g?"external_placeholder":"live_dom"),inaccessibleReason:T.inaccessibleReason}}).filter(p=>Number.isFinite(p.id)&&p.id>0),I=v.length>0?v:f;v.length===0&&J("Using fallback tab mapping",`active=${h.activeTabId}; order=${h.tabOrder.join(",")||"none"}`,"analyze"),Re||(Re=new pe(`rover-${fe}`));let C=vo(j),F=Do({tabs:I,agentName:C,externalNavigationPolicy:Oo(j),taskBoundaryId:ce}),R=nn({...j,signal:Ne?.signal,sessionId:_t||j.sessionId||fe,activeRunId:n,rootUserInput:he(ne),runtimeContext:F,tools:{web:ko(j)}},Z,Re);R.isCancelled=()=>!!(n&&re.has(n));let P=Zo(es(Ce.getFunctionDeclarations())),b=Ce.getToolFunctions();Array.isArray(t?.seedChatLog)&&(Ue=Le(t.seedChatLog));let k=Ue,M=p=>{Ke(p,{snapshot:!0})},$=p=>{se=Oe(Array.isArray(p)?p:[]),B()},x=()=>({scopedTabIds:[...ae],seedTabId:Me}),L=p=>{Nt(p)};ve(n);let E=await Gn(u,{tabs:I,scopedTabIds:ae,seedTabId:Me,getScopedTabRuntimeContext:x,onScopedTabIdsTouched:L,previousMessages:te,trajectoryId:fe,files:[],recordingContext:j.recordingContext,previousSteps:se,onStatusUpdate:J,toolFunctions:b,agentLog:{prevSteps:ie,chatLog:k},lastToolPreviousSteps:ie,taskRouting:t?.routing?{...j.taskRouting,mode:t.routing}:j.taskRouting,ctx:R,bridgeRpc:Z,functionDeclarations:P,onPrevStepsUpdate:M,onPlannerHistoryUpdate:$});if(ve(n),E.directToolResult&&Nt(Kn(E.directToolResult)),Array.isArray(E.executedFunctions)&&E.executedFunctions.length>0)for(let p of E.executedFunctions)Nt(Kn(p?.result));if(!E.success){let p=yt(E.error,"Something went wrong."),m=ss(p,ie),T=String(m.error.code||"").trim().toUpperCase();if(!!m.error.retryable||T==="STALE_SEQ"||T==="STALE_EPOCH"||T==="SESSION_TOKEN_EXPIRED"||T==="NAVIGATION_HANDOFF_PENDING"){let _=`${m.error.code}: ${m.error.message}`;return de(_),J("Waiting for navigation/session sync",m.error.message,"verify"),B(),{route:E.route,taskComplete:!1,terminalState:"in_progress",continuationReason:"loop_continue",contextResetRecommended:!1}}return m.error.requires_api_key&&Tt(m.error),de({text:`${m.error.code}: ${m.error.message}`,blocks:[{type:"json",label:"Error details",data:_e(m)}]}),J("Execution failed",m.error.message,"complete"),B(),{route:E.route,taskComplete:!1,terminalState:"failed"}}if(E.executedFunctions?.length){for(let S of E.executedFunctions)Ke(S.prevSteps,{snapshot:!1});let p=[],m=[],T=!1,g=!1,_=!1,A=!1,w=!1,D=[];for(let S of E.executedFunctions){let G=Fe(S.result);if(S.result!==void 0&&$t(S.result,G)&&p.push({type:"tool_output",toolName:S.name,label:`${S.name} output`,data:_e(S.result)}),S.error&&p.push({type:"json",label:`${S.name} error`,data:_e({error:S.error})}),m.push(G?`@${S.name}: ${G}`:`@${S.name}: ${S.error||"ok"}`),S.error){T=!0;continue}let O=S.result;if(!O||typeof O!="object")continue;let U=Array.isArray(O)?O.find(De=>De&&typeof De=="object"):O;if(!U)continue;let H=U.taskComplete;typeof H=="boolean"&&H&&(g=!0);let q=we({navigationPending:U.navigationPending,navigationOutcome:U.navigationOutcome,navigationMode:U.navigation});q.isNavigationProgress&&(_=!0,q.continuationReason==="same_tab_navigation_handoff"&&(A=!0));let K=String(U.taskStatus||U.status||"").trim().toLowerCase();(K==="failed"||K==="error"||K==="failure")&&(T=!0),(K==="waiting_input"||K==="needs_input"||K==="pending_user_input")&&(w=!0),(K==="completed"||K==="complete"||K==="done"||K==="success")&&(g=!0),(U.needsUserInput===!0||U.waitingForUserInput===!0)&&(w=!0);let Te=Ht(U);Te?.length&&(w=!0,D=ee([...D,...Te]))}return de({text:m.join(`
|
|
20
|
+
`),blocks:p}),J("Execution completed","Function calls finished","complete"),B(),T?{route:E.route,taskComplete:!1,terminalState:"failed"}:_?{route:E.route,taskComplete:!1,terminalState:"in_progress",continuationReason:A?"same_tab_navigation_handoff":"loop_continue",contextResetRecommended:!1}:w?{route:E.route,taskComplete:!1,needsUserInput:!0,questions:D.length?D:void 0,terminalState:"waiting_input",continuationReason:"awaiting_user"}:{route:E.route,taskComplete:!0,terminalState:"completed",continuationReason:void 0,contextResetRecommended:!0}}if(E.directToolResult){ve(n);let p=await Yn(E.directToolResult);if(p.openedTab&&p.readyState&&!p.readyState.ready&&!p.readyState.external){let A=String(p.openedTab.url||"").trim();if(A&&Z){J("New tab did not attach; continuing in current tab",void 0,"execute");try{let w=await Z("getTabContext"),D=Number(w?.logicalTabId??w?.id);Number.isFinite(D)&&D>0&&await Z("executeTool",{call:{name:"switch_tab",args:{tab_id:D}},payload:{forceLocal:!0,reason:"opened_tab_unattached_reset_active"}});let S=await Z("executeTool",{call:{name:"goto_url",args:{tab_id:0,url:A}},payload:{forceLocal:!0,reason:"opened_tab_unattached_fallback"}});Ut(S)}catch{}}}J("Verifying result",void 0,"verify"),Ut(E.directToolResult),Ke(E.directToolResult.prevSteps,{snapshot:!1});let m=ms(E.directToolResult),T=ee(m.questions);if(m.needsUserInput&&T.length>0){z={...Bn("act",T)},se=Oe([...se,{thought:"Need user clarification before continuing act workflow.",questionsAsked:T}]);let A=T.map(w=>`- ${w.key}: ${qn(w)}`).join(`
|
|
21
|
+
`);return de(`I need a bit more info before continuing:
|
|
22
|
+
${A}`),J("Need more input to continue",void 0,"verify"),B(),{route:E.route,taskComplete:!1,needsUserInput:!0,questions:T,terminalState:"waiting_input",continuationReason:"awaiting_user"}}z=void 0;let g=E.directToolResult.output??E.directToolResult.generatedContentRef??E.directToolResult.schemaHeaderSheetInfo,_=ns(E.directToolResult);return _?.error.requires_api_key&&Tt(_.error),de(_?{text:`${_.error.code}: ${_.error.message}`,blocks:[{type:"json",label:"Error details",data:_e(_)}]}:Jo(g,{label:"Tool output"})),J("Execution completed",_?.error.message,"complete"),B(),{route:E.route,taskComplete:m.taskComplete,needsUserInput:m.needsUserInput,questions:ee(m.questions),terminalState:m.terminalState,continuationReason:m.continuationReason,contextResetRecommended:m.contextResetRecommended}}if(E.plannerResponse){J("Verifying planner output",void 0,"verify");let p=E.plannerResponse.response,m=E.plannerResponse.toolResults||[];E.plannerResponse.previousSteps&&(se=E.plannerResponse.previousSteps,B());let T=ls(m);Ke(T,{snapshot:!1});let g=ee(p.questions),_=g.length?[]:ps(m),A=g.length?g:_;if(A.length){let O=A;z=O.length?Bn("planner",O):void 0;let U=O.map(H=>`- ${H.key}: ${qn(H)}`).join(`
|
|
23
|
+
`);return de(`I need a bit more info:
|
|
24
|
+
${U}`),J("Planner needs user input",void 0,"verify"),B(),{route:E.route,taskComplete:!1,needsUserInput:!0,questions:O,terminalState:"waiting_input",continuationReason:"awaiting_user"}}z=void 0;for(let O of m)await Yn(O),Ut(O);let w=cs(m),D=p.error||p.errorDetails?yt(p.errorDetails||{message:p.error},"Planner failed"):void 0,S=gs(m);D?.error.requires_api_key&&Tt(D.error),de(D?{text:`${D.error.code}: ${D.error.message}`,blocks:[{type:"json",label:"Planner error",data:_e(D)},...w||[]]}:{text:String(p.overallThought||us(m)||""),blocks:w}),J("Planner execution completed",p.overallThought,"complete"),B();let G=!!p.taskComplete&&!D&&!S.needsUserInput&&!S.navigationPending;return{route:E.route,taskComplete:G,needsUserInput:S.needsUserInput,terminalState:D?"failed":S.needsUserInput?"waiting_input":S.navigationPending?"in_progress":"completed",continuationReason:D?void 0:S.needsUserInput?"awaiting_user":S.navigationPending?S.sameTabNavigationPending?"same_tab_navigation_handoff":"loop_continue":void 0,contextResetRecommended:!D&&G}}return J("Completed",void 0,"complete"),B(),{route:E.route,taskComplete:!0,terminalState:"completed",contextResetRecommended:!0}}async function Qn(e,t){let n=t?.runId||crypto.randomUUID(),r=ke.get(n);if(r){if(r.ok){let c=Vn(r.outcome);self.postMessage({type:"run_completed",runId:n,taskBoundaryId:r.taskBoundaryId,ok:!0,route:c.route,taskComplete:c.taskComplete,needsUserInput:c.needsUserInput,questions:c.questions,terminalState:c.terminalState,continuationReason:c.continuationReason,contextResetRecommended:c.contextResetRecommended})}else self.postMessage({type:"run_completed",runId:n,taskBoundaryId:r.taskBoundaryId,ok:!1,error:r.error,taskComplete:!1,needsUserInput:!1,terminalState:"failed",contextResetRecommended:r.contextResetRecommended});return}if(X&&X.runId===n)return;typeof t?.trajectoryId=="string"&&t.trajectoryId.trim()&&(fe=t.trajectoryId.trim());let o=!!t?.resume,s=!!t?.preserveHistory,a=ce;Ft="",Pe=new Set,Gt="",re.delete(n),Ne=new AbortController,X={runId:n,text:e,startedAt:Date.now(),resume:o,preserveHistory:s},self.postMessage({type:"run_started",runId:n,text:e,resume:o,taskBoundaryId:a}),$n({resume:o,preserveHistory:s})&&(te.length=0),B();try{let c=Vn(await _s(e,{resume:o,preserveHistory:s,seedChatLog:Array.isArray(t?.seedChatLog)?Le(t.seedChatLog):void 0,routing:t?.routing,askUserAnswers:t?.askUserAnswers}));c.terminalState==="completed"||c.terminalState==="failed"?(Lt(n,{ok:!0,outcome:c,taskBoundaryId:a}),self.postMessage({type:"run_completed",runId:n,taskBoundaryId:a,ok:!0,route:c.route,taskComplete:c.taskComplete,needsUserInput:c.needsUserInput,questions:c.questions,terminalState:c.terminalState,continuationReason:c.continuationReason,contextResetRecommended:c.contextResetRecommended})):(ke.delete(n),self.postMessage({type:"run_state_transition",runId:n,taskBoundaryId:a,ok:!0,route:c.route,taskComplete:c.taskComplete,needsUserInput:c.needsUserInput,questions:c.questions,terminalState:c.terminalState,continuationReason:c.continuationReason,contextResetRecommended:c.contextResetRecommended}))}catch(c){if(c?.name==="AbortError")Lt(n,{ok:!1,error:"Run cancelled",taskComplete:!1,needsUserInput:!1,terminalState:"failed",contextResetRecommended:!1,taskBoundaryId:a}),self.postMessage({type:"run_completed",runId:n,taskBoundaryId:a,ok:!1,error:"Run cancelled",taskComplete:!1,needsUserInput:!1,terminalState:"failed",contextResetRecommended:!1});else throw Lt(n,{ok:!1,error:c?.message||String(c),taskComplete:!1,needsUserInput:!1,terminalState:"failed",contextResetRecommended:!0,taskBoundaryId:a}),self.postMessage({type:"run_completed",runId:n,taskBoundaryId:a,ok:!1,error:c?.message||String(c),taskComplete:!1,needsUserInput:!1,terminalState:"failed",contextResetRecommended:!0}),c}finally{Ne=null,X=null,B()}}self.onmessage=async e=>{let t=e.data||{};try{if(t.type==="init"){j=t.config,_t=typeof j.sessionId=="string"&&j.sessionId.trim()?j.sessionId.trim():_t||crypto.randomUUID(),ce=typeof j.taskBoundaryId=="string"&&j.taskBoundaryId.trim()?j.taskBoundaryId.trim():ce,ht(j),j?.timing?.actionTimeoutMs&&(bt=Math.max(5e3,Math.min(78e4,Number(j.timing.actionTimeoutMs)))),Re||(Re=new pe(`rover-${fe}`)),t.port&&(Z=No(t.port),t.port.start?.());let n=j.tools;if(Array.isArray(n))for(let r of n)Ce.registerTool(r);else if(n?.client)for(let r of n.client)Ce.registerTool(r);self.postMessage({type:"ready"}),B();return}if(t.type==="hydrate_state"){Yo(t.state),self.postMessage({type:"hydrated"});return}if(t.type==="update_config"){if(!j)throw new Error("Worker not initialized");let n=t.config||{};j={...j,...n,ui:Mo(j.ui,n.ui),tools:Po(j.tools,n.tools)},typeof n.sessionId=="string"&&n.sessionId.trim()&&(_t=n.sessionId.trim()),n?.timing?.actionTimeoutMs&&(bt=Math.max(5e3,Math.min(78e4,Number(n.timing.actionTimeoutMs)))),typeof n.taskBoundaryId=="string"&&n.taskBoundaryId.trim()&&(ce=n.taskBoundaryId.trim()),ht(n);let r=n.tools;if(Array.isArray(r))for(let o of r)Ce.registerTool(o);else if(r?.client)for(let o of r.client)Ce.registerTool(o);self.postMessage({type:"updated"}),B();return}if(t.type==="register_tool"){t.tool&&Ce.registerTool(t.tool);return}if(t.type==="start_new_task"){if(!j)throw new Error("Worker not initialized");let n=typeof t.taskId=="string"&&t.taskId.trim()?t.taskId.trim():crypto.randomUUID(),r=typeof t.taskBoundaryId=="string"&&t.taskBoundaryId.trim()?t.taskBoundaryId.trim():crypto.randomUUID();Ne?.abort(),Xn("new_task"),ke.clear(),re.clear(),fe=n,ce=r,ht(t),Re=new pe(`rover-${fe}`),X=null,Ne=null,B(),self.postMessage({type:"task_started",taskId:n});return}if(t.type==="cancel_run"){typeof t.runId=="string"&&t.runId&&(hs(t.runId),Ne?.abort()),Xn("cancel"),B();return}if(t.type==="run"){ht(t);let n=Array.isArray(t.seedChatLog)?t.seedChatLog:Array.isArray(t.followupChatLog)?t.followupChatLog:void 0;await Qn(String(t.text||""),{runId:t.runId,resume:!!t.resume,preserveHistory:!!t.preserveHistory,seedChatLog:Array.isArray(n)?Le(n):void 0,routing:t.routing,askUserAnswers:t.askUserAnswers});return}if(t.type==="user"){let n=Array.isArray(t.seedChatLog)?t.seedChatLog:Array.isArray(t.followupChatLog)?t.followupChatLog:void 0;await Qn(String(t.text||""),{runId:t.runId,resume:!!t.resume,preserveHistory:!!t.preserveHistory,seedChatLog:Array.isArray(n)?Le(n):void 0,askUserAnswers:t.askUserAnswers});return}}catch(n){if(Yt(n)){Tt(n);return}self.postMessage({type:"error",message:n?.message||String(n),runId:X?.runId})}};
|