ai-helper-agent 2.4.4 → 2.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import{a as e,c as t,l as n,r}from"./i18n-8vdDPNQb.js";import{Q as i,b as a}from"./model-profiles-CtoST6-E.js";import{p as o}from"./session-store-BrI5n6_W.js";import{o as s}from"./agent-store-BvS-vIQr.js";e(`zh`,{util:{cmdHintPowerShell:"(请使用 PowerShell 语法,如 `Get-ChildItem`、`Set-Content`、`Remove-Item` 等)",cmdHintCmd:"(请使用 CMD 语法,如 `dir`、`echo`、`del` 等)",cmdHintGitBash:"(请使用 Unix 命令,如 `ls`、`cat`、`rm` 等,路径使用正斜杠 `/`)",cmdHintPowerShellShort:`(请使用 PowerShell 语法)`,cmdHintUnix:"(请使用 Unix 命令,如 `ls`、`cat`、`rm` 等)",cmdExecEnvTitle:`## 命令执行环境`,cmdExecOsShell:`**操作系统/Shell**`,cmdExecWorkdir:`工作目录`,cmdExecWorkdirUnset:`未设置`,assistantTerm:`- **助手**:用户创建的 AI 智能体,每个助手有独立的系统提示词和工具权限,可独立工作或被其他助手调度执行子任务`,noDesc:`无描述`,subDispatchTitle:`## 子助手调度`,subDispatchDesc:`使用 dispatch_task(subAgentId, task) 分派子任务给其他助手执行,支持并行调用。`,subDispatchAvailable:`可用子助手:`,agentTerm:`- **代理**:远端执行服务,提供文件操作、命令执行等能力。可通过 manage_agent 工具查询或切换代理`,agentHostLabel:`- 代理主机地址:`,agentHostHint:`(访问代理端服务时请优先使用此地址)`,terminologyTitle:`## 术语定义`,taskPlanningTitle:`## 任务拆解`,taskPlanningDesc:`复杂任务(多步骤、有依赖)拆解为子任务,通常 2-6 个、最多不超过 8 个;简单任务(1-2 步即可完成)直接执行,不要为凑数而拆分。使用 plan_task(taskDescription, subtasks) 提交方案。重要:调用 plan_task 时必须单独调用,同一轮响应中不要同时返回其他工具调用;其他想执行的动作请编入子任务描述,由子任务执行。`,artifactDeclTitle:`## 文件产物声明`,artifactDeclDesc:`当本次任务通过脚本或命令在工作目录内创建/修改了文件(尤其是运行时才确定路径的文件,如带日期的报表),请在最终回答末尾各用一行声明每个产物,格式严格为:[[artifact:相对工作目录或绝对路径|可选中文说明]]。示例:[[artifact:报表_2026-10-20.xlsx|书签统计报表]]。只列本次真实产生的文件,不要虚构、不要列未生成的文件;说明可省略。这些标记不会展示给用户。`,memoryTitle:`## 记忆`,memoryRules:`- 统一工具 agent_memory,通过 action 区分:store(增删改)/recall(检索)/manage(审查清理)
1
+ import{a as e,c as t,l as n,r}from"./i18n-8vdDPNQb.js";import{Q as i,b as a}from"./model-profiles-CtoST6-E.js";import{p as o}from"./session-store-BBIdbyV_.js";import{o as s}from"./agent-store-D-jYf94_.js";e(`zh`,{util:{cmdHintPowerShell:"(请使用 PowerShell 语法,如 `Get-ChildItem`、`Set-Content`、`Remove-Item` 等)",cmdHintCmd:"(请使用 CMD 语法,如 `dir`、`echo`、`del` 等)",cmdHintGitBash:"(请使用 Unix 命令,如 `ls`、`cat`、`rm` 等,路径使用正斜杠 `/`)",cmdHintPowerShellShort:`(请使用 PowerShell 语法)`,cmdHintUnix:"(请使用 Unix 命令,如 `ls`、`cat`、`rm` 等)",cmdExecEnvTitle:`## 命令执行环境`,cmdExecOsShell:`**操作系统/Shell**`,cmdExecWorkdir:`工作目录`,cmdExecWorkdirUnset:`未设置`,assistantTerm:`- **助手**:用户创建的 AI 智能体,每个助手有独立的系统提示词和工具权限,可独立工作或被其他助手调度执行子任务`,noDesc:`无描述`,subDispatchTitle:`## 子助手调度`,subDispatchDesc:`使用 dispatch_task(subAgentId, task) 分派子任务给其他助手执行,支持并行调用。`,subDispatchAvailable:`可用子助手:`,agentTerm:`- **代理**:远端执行服务,提供文件操作、命令执行等能力。可通过 manage_agent 工具查询或切换代理`,agentHostLabel:`- 代理主机地址:`,agentHostHint:`(访问代理端服务时请优先使用此地址)`,terminologyTitle:`## 术语定义`,taskPlanningTitle:`## 任务拆解`,taskPlanningDesc:`复杂任务(多步骤、有依赖)拆解为子任务,通常 2-6 个、最多不超过 8 个;简单任务(1-2 步即可完成)直接执行,不要为凑数而拆分。使用 plan_task(taskDescription, subtasks) 提交方案。重要:调用 plan_task 时必须单独调用,同一轮响应中不要同时返回其他工具调用;其他想执行的动作请编入子任务描述,由子任务执行。`,artifactDeclTitle:`## 文件产物声明`,artifactDeclDesc:`当本次任务通过脚本或命令在工作目录内创建/修改了文件(尤其是运行时才确定路径的文件,如带日期的报表),请在最终回答末尾各用一行声明每个产物,格式严格为:[[artifact:相对工作目录或绝对路径|可选中文说明]]。示例:[[artifact:报表_2026-10-20.xlsx|书签统计报表]]。只列本次真实产生的文件,不要虚构、不要列未生成的文件;说明可省略。这些标记不会展示给用户。`,memoryTitle:`## 记忆`,memoryRules:`- 统一工具 agent_memory,通过 action 区分:store(增删改)/recall(检索)/manage(审查清理)
2
2
  - store: subAction=add需type+content,update需memoryId+type,**delete仅需memoryId无需type**。**删除前先recall查id**
3
3
  - recall: query用关键词(如"考试"),不用完整句子。可选memoryType和limit
4
4
  - manage: subAction=review审查价值,compact清理低价值
@@ -1 +1 @@
1
- var e=`appTheme`,t=[`light`,`dark`,`system`],n=`light`,r=`light`,i=null,a=null,o=[],s=!1;function c(e){let t=e!==r;r=e,typeof document<`u`&&document.documentElement.setAttribute(`data-theme`,e);try{localStorage.setItem(`appThemeResolved`,e)}catch{}t&&o.slice().forEach(t=>{try{t(e)}catch(e){console.warn(`[theme] subscriber error`,e)}})}function l(e){return e===`system`?typeof matchMedia<`u`&&matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e===`dark`?`dark`:`light`}(function(){try{let e=typeof localStorage<`u`&&localStorage.getItem(`appThemeResolved`);(e===`dark`||e===`light`)&&(r=e,typeof document<`u`&&document.documentElement.setAttribute(`data-theme`,e))}catch{}})();function u(){return n}function d(){return r}function f(e){o.push(e)}async function p(){typeof matchMedia<`u`&&(i=matchMedia(`(prefers-color-scheme: dark)`),a&&i.removeEventListener(`change`,a),a=()=>{n===`system`&&c(l(`system`))},i.addEventListener(`change`,a)),!s&&typeof chrome<`u`&&chrome.storage&&chrome.storage.onChanged&&(chrome.storage.onChanged.addListener((e,r)=>{r===`local`&&e.appTheme&&t.includes(e.appTheme.newValue)&&(n=e.appTheme.newValue,c(l(n)))}),s=!0);let r=await new Promise(t=>{try{chrome.storage.local.get([e],e=>{if(chrome.runtime&&chrome.runtime.lastError){t(null);return}t(e||{})})}catch{t(null)}});r!==null&&(n=t.includes(r[e])?r[e]:`light`,c(l(n)))}async function m(e){t.includes(e)&&(n=e,c(l(e)),await new Promise(t=>chrome.storage.local.set({appTheme:e},t)))}var h={version:`2.4.4`,tag:`v2.4.4`,commitId:`00f495f59c1ad5a034f34f8ecba1790510edaa46`,publishedAt:`2026-10-23T14:25:30.775Z`};export{m as a,p as i,d as n,f as o,u as r,h as t};
1
+ var e=`appTheme`,t=[`light`,`dark`,`system`],n=`light`,r=`light`,i=null,a=null,o=[],s=!1;function c(e){let t=e!==r;r=e,typeof document<`u`&&document.documentElement.setAttribute(`data-theme`,e);try{localStorage.setItem(`appThemeResolved`,e)}catch{}t&&o.slice().forEach(t=>{try{t(e)}catch(e){console.warn(`[theme] subscriber error`,e)}})}function l(e){return e===`system`?typeof matchMedia<`u`&&matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e===`dark`?`dark`:`light`}(function(){try{let e=typeof localStorage<`u`&&localStorage.getItem(`appThemeResolved`);(e===`dark`||e===`light`)&&(r=e,typeof document<`u`&&document.documentElement.setAttribute(`data-theme`,e))}catch{}})();function u(){return n}function d(){return r}function f(e){o.push(e)}async function p(){typeof matchMedia<`u`&&(i=matchMedia(`(prefers-color-scheme: dark)`),a&&i.removeEventListener(`change`,a),a=()=>{n===`system`&&c(l(`system`))},i.addEventListener(`change`,a)),!s&&typeof chrome<`u`&&chrome.storage&&chrome.storage.onChanged&&(chrome.storage.onChanged.addListener((e,r)=>{r===`local`&&e.appTheme&&t.includes(e.appTheme.newValue)&&(n=e.appTheme.newValue,c(l(n)))}),s=!0);let r=await new Promise(t=>{try{chrome.storage.local.get([e],e=>{if(chrome.runtime&&chrome.runtime.lastError){t(null);return}t(e||{})})}catch{t(null)}});r!==null&&(n=t.includes(r[e])?r[e]:`light`,c(l(n)))}async function m(e){t.includes(e)&&(n=e,c(l(e)),await new Promise(t=>chrome.storage.local.set({appTheme:e},t)))}var h={version:`2.4.5`,tag:`v2.4.5`,commitId:`5621c55b66a19870a44ecbe2a75910010e0aff01`,publishedAt:`2026-10-24T10:09:15.120Z`};export{m as a,p as i,d as n,f as o,u as r,h as t};
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "default_locale": "zh_CN",
4
4
  "name": "__MSG_extName__",
5
- "version": "2.4.4",
5
+ "version": "2.4.5",
6
6
  "description": "__MSG_extDescription__",
7
7
  "permissions": [
8
8
  "activeTab",
package/dist/options.html CHANGED
@@ -7,7 +7,7 @@
7
7
  <script type="module" crossorigin src="/assets/theme-CLwYsx9o.js"></script>
8
8
  <script type="module" crossorigin src="/assets/i18n-8vdDPNQb.js"></script>
9
9
  <script type="module" crossorigin src="/assets/model-profiles-CtoST6-E.js"></script>
10
- <script type="module" crossorigin src="/assets/version-hj8NxYZu.js"></script>
10
+ <script type="module" crossorigin src="/assets/version-Djv0o0pB.js"></script>
11
11
  <script type="module" crossorigin src="/assets/network-scope-CNRYXk74.js"></script>
12
12
  <script type="module" crossorigin src="/assets/options.js"></script>
13
13
  <link rel="stylesheet" crossorigin href="/assets/theme-BRAX5X2F.css">
@@ -8,10 +8,10 @@
8
8
  <script type="module" crossorigin src="/assets/chunk-CMxvf4Kt.js"></script>
9
9
  <script type="module" crossorigin src="/assets/i18n-8vdDPNQb.js"></script>
10
10
  <script type="module" crossorigin src="/assets/model-profiles-CtoST6-E.js"></script>
11
- <script type="module" crossorigin src="/assets/session-store-BrI5n6_W.js"></script>
12
- <script type="module" crossorigin src="/assets/version-hj8NxYZu.js"></script>
13
- <script type="module" crossorigin src="/assets/agent-store-BvS-vIQr.js"></script>
14
- <script type="module" crossorigin src="/assets/utils-BKYmnE_x.js"></script>
11
+ <script type="module" crossorigin src="/assets/session-store-BBIdbyV_.js"></script>
12
+ <script type="module" crossorigin src="/assets/version-Djv0o0pB.js"></script>
13
+ <script type="module" crossorigin src="/assets/agent-store-D-jYf94_.js"></script>
14
+ <script type="module" crossorigin src="/assets/utils-BIworoAB.js"></script>
15
15
  <script type="module" crossorigin src="/assets/side_panel.js"></script>
16
16
  <link rel="stylesheet" crossorigin href="/assets/theme-BRAX5X2F.css">
17
17
  <link rel="stylesheet" crossorigin href="/assets/side_panel.css">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-helper-agent",
3
- "version": "2.4.4",
3
+ "version": "2.4.5",
4
4
  "description": "AI Helper Agent - Local file access and system command execution proxy for Chrome extension / AI Helper 代理服务,为 Chrome 扩展提供本地文件读写和系统命令执行",
5
5
  "type": "module",
6
6
  "main": "./src/server.js",
@@ -1,81 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/jszip.min-DO6SOhXU.js","assets/chunk-CMxvf4Kt.js","assets/pdf-DnVqBaAN.js","assets/__vite-browser-external-CM3Eme-n.js","assets/agent-store-BvS-vIQr.js","assets/i18n-8vdDPNQb.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./chunk-CMxvf4Kt.js";import{a as t,c as n,l as r}from"./i18n-8vdDPNQb.js";import{b as i}from"./model-profiles-CtoST6-E.js";t(`zh`,{db:{sessionLabel:`会话 {id}`,archivedLabel:`[归档] {label}`}}),t(`en`,{db:{sessionLabel:`Session {id}`,archivedLabel:`[Archived] {label}`}});var a=`ai-helper-db`,o=6,s=10080*60*1e3,c=`react_checkpoint_`;function l(){return new Promise((e,t)=>{let n=indexedDB.open(a,o);n.onupgradeneeded=e=>{let t=e.target.result;if(t.objectStoreNames.contains(`sessions`)||t.createObjectStore(`sessions`,{keyPath:`id`}).createIndex(`updatedAt`,`updatedAt`,{unique:!1}),t.objectStoreNames.contains(`activeSession`)||t.createObjectStore(`activeSession`,{keyPath:`key`}),t.objectStoreNames.contains(`archivedSessions`)||t.createObjectStore(`archivedSessions`,{keyPath:`id`}).createIndex(`createdAt`,`createdAt`,{unique:!1}),!t.objectStoreNames.contains(`uiPrototypes`)){let e=t.createObjectStore(`uiPrototypes`,{keyPath:`id`});e.createIndex(`createdAt`,`createdAt`,{unique:!1}),e.createIndex(`sessionId`,`sessionId`,{unique:!1})}if(!t.objectStoreNames.contains(`tokenStats`)){let e=t.createObjectStore(`tokenStats`,{keyPath:`id`});e.createIndex(`sessionId`,`sessionId`,{unique:!1}),e.createIndex(`timestamp`,`timestamp`,{unique:!1})}if(t.objectStoreNames.contains(`reactCheckpoints`)||t.createObjectStore(`reactCheckpoints`,{keyPath:`sessionId`}).createIndex(`updatedAt`,`updatedAt`,{unique:!1}),!t.objectStoreNames.contains(`bookmarks`)){let e=t.createObjectStore(`bookmarks`,{keyPath:`id`});e.createIndex(`sessionId`,`sessionId`,{unique:!1}),e.createIndex(`createdAt`,`createdAt`,{unique:!1})}if(!t.objectStoreNames.contains(`scheduledTasks`)){let e=t.createObjectStore(`scheduledTasks`,{keyPath:`id`});e.createIndex(`nextRunAt`,`nextRunAt`,{unique:!1}),e.createIndex(`enabled`,`enabled`,{unique:!1})}},n.onsuccess=t=>{let n=t.target.result;n.onversionchange=e=>{r.debug(`[IDB] detected versionchange event,maindynamicclosecurrent connection as allows upgrade`);try{e.target.close()}catch{}u=null},e(n)},n.onerror=e=>{r.error(`[IDB] opendatabase failed:`,e.target.error),t(e.target.error)},n.onblocked=()=>{r.warn(`[IDB] databaseupgrade blocked (other connections notclose),waitingretry...`)}})}var u=null;function d(){u&&(u=null,r.debug(`[IDB] databaseconnectionreset`))}function f(){return u||=l(),u}function p(e,t,n,i=!1){return f().then(a=>new Promise((o,s)=>{let c=null,l=!1;if(!a.objectStoreNames.contains(e))if(r.error(`[IDB] store "${e}" not found!current DB version: ${a.version}, store column table: [${Array.from(a.objectStoreNames).join(`, `)}]`),i){l=!0,s(Error(`Store "${e}" does not exist in database (version ${a.version})`));return}else{l=!0;try{a.close()}catch{}d(),setTimeout(()=>{p(e,t,n,!0).then(o).catch(s)},50);return}let u;try{u=a.transaction(e,t)}catch(a){if(r.error(`[IDB] create transaction failed (${e}):`,a.message),i){l=!0,s(a);return}else{l=!0,d(),setTimeout(()=>{p(e,t,n,!0).then(o).catch(s)},50);return}}n(u.objectStore(e),e=>{c=e}),u.oncomplete=()=>{l||(l=!0,o(c))},u.onerror=a=>{if(l)return;l=!0;let c=a.target.error||Error(`Transaction error on ${e}`);r.error(`[IDB] transaction error (${e}):`,c),i?s(c):(d(),p(e,t,n,!0).then(o).catch(s))},u.onabort=()=>{l||(l=!0,i?s(Error(`Transaction aborted on ${e}`)):(d(),p(e,t,n,!0).then(o).catch(s)))}}))}function m(){return p(`sessions`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}function h(e){return p(`sessions`,`readonly`,(t,n)=>{let r=t.get(e);r.onsuccess=()=>n(r.result||null),r.onerror=()=>n(null)})}async function g(e,t){if(!e||!t)return!1;try{let n=await h(e);if(!n||!n.messageHistory)return!1;let r=n.messageHistory.findIndex(e=>(e.messageId||e.id)===t);return r===-1?!1:(n.messageHistory.splice(r,1),await _(n))}catch(e){return r.error(`[DB] deleteMessageFromSession failed:`,e),!1}}function _(e){return p(`sessions`,`readwrite`,(t,n)=>{let r=t.put(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function ee(e){return p(`sessions`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function te(e){return f().then(t=>new Promise(n=>{let r=t.transaction(`sessions`,`readwrite`),i=r.objectStore(`sessions`);e.forEach(e=>i.put(e)),r.oncomplete=()=>n(!0),r.onerror=()=>n(!1)}))}function v(){return p(`activeSession`,`readonly`,(e,t)=>{let n=e.get(`active`);n.onsuccess=()=>t(n.result?.sessionId||null),n.onerror=()=>t(null)})}function y(e){return p(`activeSession`,`readwrite`,(t,n)=>{let r=t.put({key:`active`,sessionId:e});r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function b(){return p(`archivedSessions`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}function x(e){return f().then(t=>new Promise(n=>{let r=t.transaction(`archivedSessions`,`readwrite`),i=r.objectStore(`archivedSessions`),a=i.clear();a.onsuccess=()=>{e.forEach(e=>i.put(e))},r.oncomplete=()=>n(!0),r.onerror=()=>n(!1)}))}function ne(e){let t=Date.now(),n={...e,createdAt:e.createdAt||t,updatedAt:t};return p(`uiPrototypes`,`readwrite`,(e,t)=>{let r=e.put(n);r.onsuccess=()=>t(n),r.onerror=()=>t(null)})}function re(e){return p(`uiPrototypes`,`readonly`,(t,n)=>{let r=t.get(e);r.onsuccess=()=>n(r.result||null),r.onerror=()=>n(null)})}function ie(e=null){return p(`uiPrototypes`,`readonly`,(t,n)=>{let r=t.getAll();r.onsuccess=()=>{let t=r.result||[];e&&(t=t.filter(t=>t.sessionId===e)),t.sort((e,t)=>(t.createdAt||0)-(e.createdAt||0)),n(t)},r.onerror=()=>n([])})}function ae(e){return p(`uiPrototypes`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function oe(e){return e?h(e).then(e=>{if(!e)return[];let t=e.title||n(`db.sessionLabel`,{id:e.id?.slice(0,8)});return(e.messageHistory||[]).filter(e=>e.content).map((n,r)=>({session:e.id,sessionLabel:t,index:r,role:n.role,content:n.content}))}):m().then(e=>{let t=e,r=[];return t.forEach(e=>{let t=e.title||n(`db.sessionLabel`,{id:e.id?.slice(0,8)});(e.messageHistory||[]).forEach((n,i)=>{n.content&&r.push({session:e.id,sessionLabel:t,index:i,role:n.role,content:n.content})})}),r})}function se(){return b().then(e=>{let t=[];return e.forEach(e=>{let r=n(`db.archivedLabel`,{label:e.title||n(`db.sessionLabel`,{id:e.id?.slice(0,8)})});(e.messages||[]).forEach((n,i)=>{n.content&&t.push({session:e.id,sessionLabel:r,index:i,role:n.role,content:n.content})})}),t})}function ce(){return new Promise(e=>{chrome.storage.local.get([`sessions`,`conversationSessions`],async t=>{let n=!1;if(t.sessions?.list?.length>0){let{list:e,activeSessionId:i}=t.sessions;await te(e),i&&await y(i),n=!0,r.debug(`[IDB] migrated activesession:`,e.length,``)}t.conversationSessions?.sessions?.length>0&&(await x(t.conversationSessions.sessions),n=!0,r.debug(`[IDB] migrated archivesession:`,t.conversationSessions.sessions.length,``)),n&&chrome.storage.local.remove([`sessions`,`conversationSessions`,`chatHistory`],()=>{r.debug(`[IDB] cleaned chrome.storage.local olddata`)}),e(n)})})}async function le(){(await m()).length>0||await v()||await ce()}async function ue(e){if(!e?.sessionId)return!1;let t=Date.now(),n={...e,updatedAt:t,createdAt:e.createdAt||t},i=c+e.sessionId,a=!1;try{await chrome.storage.local.set({[i]:n}),a=!0}catch(e){r.warn(`[Storage] chrome.storage.local save checkpoint failed:`,e.message)}let o=!1;try{o=await p(`reactCheckpoints`,`readwrite`,(e,t)=>{let r=e.put(n);r.onsuccess=()=>t(!0),r.onerror=()=>t(!1)})}catch(e){r.warn(`[Storage] IndexedDB save checkpoint failed (downgraded to chrome.storage.local):`,e.message)}return!a&&!o?(r.error(`[Storage] checkpoint save complete failed:chrome.storage.local and IndexedDB averagenon- with `),!1):!0}async function de(e){if(!e)return null;try{let t=await p(`reactCheckpoints`,`readonly`,(t,n)=>{let r=t.get(e);r.onsuccess=()=>n(r.result||null),r.onerror=()=>n(null)});if(t)return t}catch{}try{let t=c+e;return(await chrome.storage.local.get(t))[t]||null}catch(e){return r.warn(`[Storage] chrome.storage.local read checkpoint failed:`,e.message),null}}async function S(e){if(!e)return!1;let t=!1;try{let n=c+e;await chrome.storage.local.remove(n),t=!0}catch(e){r.warn(`[Storage] chrome.storage.local delete checkpoint failed:`,e.message)}try{await p(`reactCheckpoints`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)}),t=!0}catch{}return t}async function fe(){let e=[];try{let t=await chrome.storage.local.get(null);for(let[n,r]of Object.entries(t))n.startsWith(c)&&r?.sessionId&&e.push(r)}catch(e){r.warn(`[Storage] chrome.storage.local get all checkpoint failed:`,e.message)}let t=[];try{t=await p(`reactCheckpoints`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}catch{}let n=new Map;for(let t of e)n.set(t.sessionId,t);for(let e of t)n.set(e.sessionId,e);return Array.from(n.values())}async function pe(){let e=await fe(),t=Date.now(),n=e.filter(e=>(e.updatedAt||0)<t-s);if(n.length===0)return 0;let i=0;for(let e of n)await S(e.sessionId)&&i++;return r.debug(`[IDB] cleanup ${i} expired ReAct checkpoint`),i}function C(){return p(`bookmarks`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}function me(e){return p(`bookmarks`,`readwrite`,(t,n)=>{let r=t.put(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function w(e){return p(`bookmarks`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function he(e,t){return p(`bookmarks`,`readwrite`,(n,r)=>{let i=n.get(e);i.onsuccess=()=>{let e=i.result;if(!e){r(!1);return}e.pinned=t;let a=n.put(e);a.onsuccess=()=>r(!0),a.onerror=()=>r(!1)},i.onerror=()=>r(!1)})}function ge(e){return p(`scheduledTasks`,`readonly`,(t,n)=>{let r=t.get(e);r.onsuccess=()=>n(r.result||null),r.onerror=()=>n(null)})}function _e(){return p(`scheduledTasks`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}function ve(e){return p(`scheduledTasks`,`readwrite`,(t,n)=>{let r=t.put(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function ye(e){return p(`scheduledTasks`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function be(e){return(e?.streamConfig?.streamEnabled===void 0?e?.streamEnabled:e.streamConfig.streamEnabled)!==!1}async function T(){return(await new Promise(e=>{try{chrome.storage.local.get([`streamEnabled`],e)}catch{e({})}}))?.streamEnabled!==!1}function xe(e,t){let n={...e};return t?(n.stream=!0,n.stream_options={...n.stream_options||{},include_usage:!0}):(n.stream=!1,delete n.stream_options),n}function Se(e){try{let t=typeof e.headers?.get==`function`&&e.headers.get(`Content-Type`)||``;return String(t).toLowerCase().includes(`event-stream`)}catch{return!1}}async function Ce(e){let t=e.body.getReader(),n=new TextDecoder,r=``,i=``,a=null;try{for(;;){let{done:e,value:o}=await t.read();e?r+=`
3
- `:r+=n.decode(o,{stream:!1});let s=r.split(`
4
- `);r=s.pop()||``;for(let e of s){let t=``;if(e.startsWith(`data:`)&&(t=e.substring(5).trim()),!(!t||t===`[DONE]`))try{let e=JSON.parse(t);e.usage&&(a=e.usage);let n=e.choices?.[0]?.delta?.content||e.choices?.[0]?.message?.content||e.choices?.[0]?.text||``;n&&(i+=n)}catch{}}if(e)break}}finally{try{t.releaseLock()}catch{}}return{choices:[{message:{role:`assistant`,content:i}}],usage:a}}async function E(e,{headers:t,body:n,useStream:r,signal:i,fetchImpl:a}={}){let o=a||((e,t)=>fetch(e,t)),s=r!==!1,c=await o(e,{method:`POST`,headers:t,body:JSON.stringify(xe(n,s)),signal:i});if(!c.ok)return{ok:!1,status:c.status,data:null};if(s&&c.body&&Se(c)){let e=await Ce(c);return{ok:!0,status:c.status,data:e}}let l=await c.json();return{ok:!0,status:c.status,data:l}}var D=`tokenStats`,O=new Set([`selection_toolbar`]);function we(e){let t={id:`tcr_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,sessionId:e.sessionId,timestamp:new Date().toISOString(),model:e.model||`unknown`,promptTokens:e.promptTokens||0,completionTokens:e.completionTokens||0,totalTokens:e.totalTokens||0,contextWindow:e.contextWindow||256e3,contextUsageRate:e.contextWindow>0?(e.promptTokens||0)/e.contextWindow:0,callType:e.callType||`unknown`};return p(D,`readwrite`,(e,n)=>{let r=e.put(t);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function Te(e){return p(D,`readonly`,(t,n)=>{let r=t.index(`sessionId`),i=e?r.getAll(IDBKeyRange.bound(e,e+`￿`)):t.getAll();i.onsuccess=()=>{let t=(i.result||[]).filter(t=>t.sessionId===e||e&&t.sessionId?.startsWith(e+`_`));if(t.length===0){n({sessionId:e,totalPromptTokens:0,totalCompletionTokens:0,totalTokens:0,apiCallCount:0,avgContextUsageRate:0,maxContextUsageRate:0,minContextUsageRate:0,records:[]});return}let r=t.map(e=>e.contextUsageRate||0).filter(e=>e>0);n({sessionId:e,totalPromptTokens:t.reduce((e,t)=>e+(t.promptTokens||0),0),totalCompletionTokens:t.reduce((e,t)=>e+(t.completionTokens||0),0),totalTokens:t.reduce((e,t)=>e+(t.totalTokens||0),0),apiCallCount:t.length,avgContextUsageRate:r.length>0?r.reduce((e,t)=>e+t,0)/r.length:0,maxContextUsageRate:r.length>0?Math.max(...r):0,minContextUsageRate:r.length>0?Math.min(...r):0,records:t.sort((e,t)=>new Date(t.timestamp)-new Date(e.timestamp)).slice(0,20)})},i.onerror=()=>n(null)})}function Ee(){return p(D,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>{let e=n.result||[];if(e.length===0){t({totalPromptTokens:0,totalCompletionTokens:0,totalTokens:0,totalApiCalls:0,totalSessions:0,lastUpdated:null});return}let r=new Set(e.map(e=>e.sessionId).filter(e=>e&&!O.has(e)));t({totalPromptTokens:e.reduce((e,t)=>e+(t.promptTokens||0),0),totalCompletionTokens:e.reduce((e,t)=>e+(t.completionTokens||0),0),totalTokens:e.reduce((e,t)=>e+(t.totalTokens||0),0),totalApiCalls:e.length,totalSessions:r.size,lastUpdated:e.reduce((e,t)=>t.timestamp>e?t.timestamp:e,``)})},n.onerror=()=>t(null)})}function De(){return p(D,`readwrite`,(e,t)=>{let n=e.clear();n.onsuccess=()=>t(!0),n.onerror=()=>t(!1)})}function Oe(e=30){return p(D,`readonly`,(t,n)=>{let r=new Date(new Date().getTime()-e*24*60*60*1e3),i=t.index(`timestamp`).getAll(IDBKeyRange.lowerBound(r.toISOString()));i.onsuccess=()=>{let e=i.result||[],t=new Map;e.forEach(e=>{let n=new Date(e.timestamp);if(n<r)return;let i=n.toISOString().split(`T`)[0];t.has(i)||t.set(i,{date:i,totalTokens:0,apiCalls:0});let a=t.get(i);a.totalTokens+=e.totalTokens||0,a.apiCalls+=1}),n(Array.from(t.values()).sort((e,t)=>e.date.localeCompare(t.date)))},i.onerror=()=>n([])})}function ke(e,t){return p(D,`readonly`,(n,r)=>{let i=n.index(`timestamp`).getAll(IDBKeyRange.bound(e,t));i.onsuccess=()=>{let n=i.result||[],a=new Date(e),o=new Date(t),s=n.filter(e=>{let t=new Date(e.timestamp);return t>=a&&t<=o});if(s.length===0){r({totalPromptTokens:0,totalCompletionTokens:0,totalTokens:0,totalApiCalls:0,totalSessions:0,lastUpdated:null});return}let c=new Set(s.map(e=>e.sessionId).filter(e=>e&&!O.has(e)));r({totalPromptTokens:s.reduce((e,t)=>e+(t.promptTokens||0),0),totalCompletionTokens:s.reduce((e,t)=>e+(t.completionTokens||0),0),totalTokens:s.reduce((e,t)=>e+(t.totalTokens||0),0),totalApiCalls:s.length,totalSessions:c.size,lastUpdated:s.reduce((e,t)=>t.timestamp>e?t.timestamp:e,``)})},i.onerror=()=>r(null)})}function Ae(){return p(D,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>{let e=n.result||[],r=new Map;e.forEach(e=>{let t=e.model||`unknown`;r.has(t)||r.set(t,0),r.set(t,r.get(t)+(e.totalTokens||0))});let i=Array.from(r.values()).reduce((e,t)=>e+t,0);t(Array.from(r.entries()).map(([e,t])=>({model:e,totalTokens:t,percentage:i>0?t/i*100:0})).sort((e,t)=>t.totalTokens-e.totalTokens))},n.onerror=()=>t([])})}function je(){return p(D,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>{let e=n.result||[],r=new Map;e.forEach(e=>{let t=e.callType||`unknown`;r.has(t)||r.set(t,0),r.set(t,r.get(t)+(e.totalTokens||0))});let i=Array.from(r.values()).reduce((e,t)=>e+t,0);t(Array.from(r.entries()).map(([e,t])=>({callType:e,totalTokens:t,percentage:i>0?t/i*100:0})).sort((e,t)=>t.totalTokens-e.totalTokens))},n.onerror=()=>t([])})}var Me=[{id:`default`,name:`Default Assistant`,description:`All-purpose AI assistant with all tool capabilities`,icon:`🤖`,systemPrompt:null,toolIds:null,skillIds:null,isBuiltin:!0,allowSubDispatch:!1,model:null,temperature:null,topP:null}],Ne=[{name:`Code Review Expert`,icon:`🔍`,description:`Focused on code review and quality assurance`,systemPrompt:`You are a senior Code Review Expert. Your responsibilities:
5
- 1. Review code for logical correctness, performance, and security
6
- 2. Check code style, naming conventions, and best practices
7
- 3. Identify potential bugs, memory leaks, and concurrency issues
8
- 4. Provide actionable improvement suggestions with example code
9
-
10
- Response principles:
11
- - Always indicate severity (critical/moderate/suggestion)
12
- - Provide specific code modification suggestions, avoid vague comments
13
- - Focus on maintainability, not just functional correctness`,systemPromptZh:`你是一位资深代码审查专家。你的职责:
14
- 1. 审查代码的逻辑正确性、性能和安全性
15
- 2. 检查代码风格、命名规范和最佳实践
16
- 3. 识别潜在的 Bug、内存泄漏和并发问题
17
- 4. 提供可操作的改进建议,并附带示例代码
18
-
19
- 回复原则:
20
- - 始终标注严重程度(严重/中等/建议)
21
- - 提供具体的代码修改建议,避免模糊评论
22
- - 关注可维护性,而非仅关注功能正确性`,toolIds:[`page_content`,`search_browser_data`,`agent_file`,`agent_search`,`search_chats`,`fetch_url`,`plan_task`],allowSubDispatch:!1},{name:`Web Automation Assistant`,icon:`🌐`,description:`Focused on web interaction and automation`,systemPrompt:`You are a web automation expert. Your strengths:
23
- 1. Automate web page interactions based on user needs (clicking, form filling, scrolling, etc.)
24
- 2. Extract and analyze web page content
25
- 3. Handle multi-step web interaction flows
26
-
27
- Operating principles:
28
- - Understand page structure before acting; prefer query_elements first
29
- - Verify results after actions to ensure they take effect
30
- - Analyze errors and try alternative approaches
31
- - Never assume elements exist; fetch page info first when uncertain
32
- - For dialogs (alert/confirm/prompt), call handle_dialog BEFORE the action that triggers them, then use interact_element to proceed`,systemPromptZh:`你是一位网页自动化专家。你的优势:
33
- 1. 根据用户需求自动化网页交互(点击、表单填写、滚动等)
34
- 2. 提取和分析网页内容
35
- 3. 处理多步骤的网页交互流程
36
-
37
- 操作原则:
38
- - 行动前先理解页面结构,优先使用 query_elements
39
- - 操作后验证结果,确保生效
40
- - 分析错误并尝试替代方案
41
- - 不要假设元素存在,不确定时先获取页面信息
42
- - 涉及 alert/confirm/prompt 弹窗时,先在触发弹窗的操作前调用 handle_dialog,再通过 interact_element 继续`,toolIds:[`page_content`,`query_elements`,`interact_element`,`fill_form`,`scroll_to`,`wait_element`,`keyboard_input`,`select_dropdown`,`capture_page`,`extract_data`,`search_in_page`,`wait_navigation`,`scroll_collect`,`file_upload`,`iframe_content`,`manage_tab`,`handle_dialog`],allowSubDispatch:!1},{name:`Data Analyst`,icon:`📊`,description:`Focused on data extraction, analysis, and visualization`,systemPrompt:`You are a data analyst. Your strengths:
43
- 1. Extract structured data from web pages (tables, lists, JSON)
44
- 2. Analyze and summarize data patterns
45
- 3. Present analysis results in clear formats
46
-
47
- Analysis principles:
48
- - Understand data structure before starting analysis
49
- - Use the most appropriate extraction method (tables → extract_data with dataType=table; links/images/forms → extract_data with dataType=links/images/forms; text/HTML → page_content with format=text/html)
50
- - Support analysis results with data; avoid subjective assumptions
51
- - Present conclusions using tables or charts`,systemPromptZh:`你是一位数据分析师。你的优势:
52
- 1. 从网页中提取结构化数据(表格、列表、JSON)
53
- 2. 分析和总结数据模式
54
- 3. 以清晰格式呈现分析结果
55
-
56
- 分析原则:
57
- - 开始分析前先理解数据结构
58
- - 使用最合适的提取方法(表格使用 extract_data 配合 dataType=table;链接/图片/表单等结构化数据使用 extract_data 配合 dataType=links/images/forms;纯文本/HTML 使用 page_content 配合 format=text/html)
59
- - 用数据支撑分析结果,避免主观臆断
60
- - 使用表格或图表呈现结论`,toolIds:[`page_content`,`extract_data`,`query_elements`,`search_in_page`,`scroll_collect`,`fetch_url`,`iframe_content`,`clipboard`],allowSubDispatch:!1},{name:`Documentation Assistant`,icon:`📝`,description:`Focused on technical documentation and content organization`,systemPrompt:`You are a technical documentation expert. Your strengths:
61
- 1. Write clear technical documentation (API docs, READMEs, user guides)
62
- 2. Distill and summarize technical information
63
- 3. Transform complex concepts into easy-to-understand documentation
64
-
65
- Writing principles:
66
- - Clear structure: Use headings, lists, and tables to organize content
67
- - Examples first: Key concepts must include code or configuration examples
68
- - Reader-oriented: Adjust technical depth based on target audience
69
- - Stay concise: Avoid redundancy; every paragraph should carry information`,systemPromptZh:`你是一位技术文档专家。你的优势:
70
- 1. 编写清晰的技术文档(API 文档、README、用户指南)
71
- 2. 提炼和总结技术信息
72
- 3. 将复杂概念转化为易于理解的文档
73
-
74
- 编写原则:
75
- - 结构清晰:使用标题、列表和表格组织内容
76
- - 示例先行:关键概念必须附带代码或配置示例
77
- - 面向读者:根据目标受众调整技术深度
78
- - 保持简洁:避免冗余,每段文字都应承载信息`,toolIds:[`page_content`,`clipboard`,`search_browser_data`,`search_chats`,`fetch_url`,`agent_file`,`agent_search`,`extract_data`,`capture_page`,`search_in_page`],allowSubDispatch:!1}];function Pe(){return`agent_`+Date.now().toString(36)+`_`+Math.random().toString(36).substring(2,6)}var Fe=[{id:`knowledge_search`,category:`knowledge`,execution:`background`,parallelizable:!0,requiresConfirmation:!1,type:`function`,function:{name:`knowledge_search`,description:`Search knowledge bases for relevant information. Use when you need factual grounding or the user asks about specific topics.`,parameters:{type:`object`,properties:{query:{type:`string`,description:`Search query`},collectionId:{type:`string`,description:`Knowledge base ID; omit to search all`},topK:{type:`integer`,description:`Number of results to return, default 5`}},required:[`query`]}}},{id:`knowledge_ingest`,category:`knowledge`,execution:`background`,parallelizable:!1,requiresConfirmation:!1,type:`function`,function:{name:`knowledge_ingest`,description:`Ingest a document or text into a knowledge base for future retrieval. Use knowledge_list first to get the collectionId.`,parameters:{type:`object`,properties:{collectionId:{type:`string`,description:`Target knowledge base ID (from knowledge_list)`},type:{type:`string`,enum:[`text`,`file`,`url`],description:`Source type: text (raw content), file (local file path), url (web page)`},content:{type:`string`,description:`Raw text, local file path, or URL depending on type`},name:{type:`string`,description:`Optional document name for display`},metadata:{type:`object`,description:`Optional metadata to attach to chunks`}},required:[`collectionId`,`type`,`content`]}}},{id:`knowledge_list`,category:`knowledge`,execution:`background`,parallelizable:!0,requiresConfirmation:!1,type:`function`,function:{name:`knowledge_list`,description:`List available knowledge bases and their document counts`,parameters:{type:`object`,properties:{}}}}],Ie=`modulepreload`,Le=function(e){return`/`+e},k={},A=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=Le(t,n),t in k)return;k[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:Ie,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};t(`zh`,{docImages:{header:`[文档图片: 共 {total} 张,已描述 {described} 张]`,page:`|第{page}页`,sheetLoc:`|工作表{sheet}!{cell}`,lineDescribed:`〔图片{index}{loc}〕{desc}`,lineTool:`〔图片{index}{loc}〕未描述,可调用 read_image(file="{file}", image={index}) 查看。`,truncated:`[另有 {count} 张图未抽取,超出单文档 20 张上限]`,describePrompt:`请客观描述这张图片的内容,并转录其中全部可读文字(OCR),不超过 300 字。`,previewDescribed:`已描述 {described}/{total}`,previewDeepReadable:` · 可深读 {count}`,previewCompact:`📷 {described}/{total}`,previewCompactDeep:` · {count}`,previewFail:`📷 图片抽取失败`,previewOff:`图片不会被识别(可在设置中开启图片识别)`}}),t(`en`,{docImages:{header:`[Document images: {total} total, {described} described]`,page:` | p.{page}`,sheetLoc:` | sheet {sheet}!{cell}`,lineDescribed:`[Image {index}{loc}] {desc}`,lineTool:`[Image {index}{loc}] not described; call read_image(file="{file}", image={index}) to view.`,truncated:`[{count} more images were not extracted due to the 20-image limit]`,describePrompt:`Describe this image objectively and transcribe all readable text (OCR) in it, within 300 words.`,previewDescribed:`described {described}/{total}`,previewDeepReadable:` · {count} deep-readable`,previewCompact:`📷 {described}/{total}`,previewCompactDeep:` · {count}`,previewFail:`📷 image extraction failed`,previewOff:`Images will not be recognized (enable image recognition in settings)`}});var j={DESCRIBE_LIMIT:2,MAX_IMAGE_BYTES:200*1024,MAX_IMAGES:20,MAX_RAW_BYTES:5*1024*1024,SNAPSHOT_BUDGET:4*1024*1024,SCANNED_PAGE_TEXT_THRESHOLD:50},M={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,bmp:`image/bmp`,webp:`image/webp`};function N(e){let t=String(e||``).split(`,`)[1]||``;return Math.floor(t.length*3/4)}function P(e,t){let n=``;for(let t=0;t<e.length;t+=8192)n+=String.fromCharCode.apply(null,e.subarray(t,t+8192));return`data:${t};base64,${btoa(n)}`}function F(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength);if(e.length>24&&e[0]===137&&e[1]===80)return{width:t.getUint32(16),height:t.getUint32(20)};if(e.length>9&&e[0]===255&&e[1]===216)for(let n=2;n<e.length-9;){if(e[n]!==255){n++;continue}let r=e[n+1];if(r>=192&&r<=207&&r!==196&&r!==200&&r!==204)return{height:t.getUint16(n+5),width:t.getUint16(n+7)};n+=2+t.getUint16(n+2)}return{width:0,height:0}}async function Re(t,n={}){let r=n.maxImages||j.MAX_IMAGES,i=await(await A(async()=>{let{default:t}=await import(`./jszip.min-DO6SOhXU.js`).then(t=>e(t.t(),1));return{default:t}},__vite__mapDeps([0,1]))).default.loadAsync(t),a=i.file(`word/document.xml`),o=i.file(`word/_rels/document.xml.rels`);if(!a||!o)return{images:[],truncated:0,skipped:0};let s=new Map;for(let e of(await o.async(`string`)).matchAll(/<Relationship\b[^>]*>/g)){let t=e[0].match(/Id="([^"]+)"/)?.[1],n=e[0].match(/Target="([^"]+)"/)?.[1];t&&n&&/media\//i.test(n)&&s.set(t,`word/media/`+n.split(`/`).pop())}let c=[],l=new Set;for(let e of(await a.async(`string`)).matchAll(/r:embed="(rId\d+)"/g)){let t=s.get(e[1]);t&&!l.has(t)&&(l.add(t),c.push(t))}let u=[],d=0,f=0;for(let e of c){let t=e.split(`.`).pop().toLowerCase();if(!M[t]){f++;continue}if(u.length>=r){d++;continue}let n=i.file(e);if(!n){f++;continue}let a=await n.async(`uint8array`);if(a.length>j.MAX_RAW_BYTES){f++;continue}let{width:o,height:s}=F(a);u.push({index:u.length+1,page:null,mimeType:M[t],bytes:a.length,width:o,height:s,dataUrl:P(a,M[t]),kind:`embedded`})}return{images:u,truncated:d,skipped:f}}function ze(e,t){let n=``,r=e+1;for(;r>0;){let e=(r-1)%26;n=String.fromCharCode(65+e)+n,r=Math.floor((r-1)/26)}return`${n}${t+1}`}async function Be(t,n={}){let r=n.maxImages||j.MAX_IMAGES,i=(await A(async()=>{let{default:t}=await import(`./jszip.min-DO6SOhXU.js`).then(t=>e(t.t(),1));return{default:t}},__vite__mapDeps([0,1]))).default,a;try{a=await i.loadAsync(t)}catch{return{images:[],truncated:0,skipped:0}}let o=a.file(`xl/workbook.xml`),s=a.file(`xl/_rels/workbook.xml.rels`);if(!o||!s)return{images:[],truncated:0,skipped:0};let c=async(e,t)=>{let n=new Map;if(!e)return n;for(let r of(await e.async(`string`)).matchAll(/<Relationship\b[^>]*>/g)){let e=r[0].match(/Id="([^"]+)"/)?.[1],i=r[0].match(/Type="([^"]+)"/)?.[1]||``,a=r[0].match(/Target="([^"]+)"/)?.[1];e&&a&&t.test(i)&&n.set(e,a)}return n},l=await c(s,/worksheet$/),u=await o.async(`string`),d=[];for(let e of u.matchAll(/<sheet\b[^>]*>/g)){let t=e[0].match(/name="([^"]+)"/)?.[1],n=e[0].match(/r:id="([^"]+)"/)?.[1],r=n&&l.get(n);t&&r&&d.push({name:t,file:`xl/`+r.replace(/^\//,``)})}let f=[],p=0,m=0,h=new Set;for(let e of d){let t=await c(a.file(`xl/worksheets/_rels/${e.file.split(`/`).pop()}.rels`),/drawing$/);for(let n of t.values()){let t=`xl/`+n.replace(/^\//,``).replace(/^\.\.\//,``),i=a.file(t);if(!i)continue;let o=await c(a.file(t.replace(`drawings/`,`drawings/_rels/`)+`.rels`),/image$/),s=await i.async(`string`);for(let t of s.matchAll(/<[a-z]+:(?:oneCellAnchor|twoCellAnchor|absoluteAnchor)\b[\s\S]*?<\/[a-z]+:(?:oneCellAnchor|twoCellAnchor|absoluteAnchor)>/g)){let n=t[0].match(/r:embed="(rId\d+)"/)?.[1];if(!n)continue;let i=o.get(n);if(!i){m++;continue}let s=`xl/`+i.replace(/^\.\.\//,``).replace(/^\//,``),c=s.split(`.`).pop().toLowerCase();if(!M[c]){m++;continue}if(h.has(s))continue;h.add(s);let l=Number(t[0].match(/<xdr:from>[\s\S]*?<xdr:col>(\d+)<\/xdr:col>/)?.[1]??0),u=Number(t[0].match(/<xdr:from>[\s\S]*?<xdr:row>(\d+)<\/xdr:row>/)?.[1]??0);if(f.length>=r){p++;continue}let d=a.file(s);if(!d){m++;continue}let g=await d.async(`uint8array`);if(g.length>j.MAX_RAW_BYTES){m++;continue}let{width:_,height:ee}=F(g);f.push({index:f.length+1,page:null,sheet:e.name,cell:ze(l,u),mimeType:M[c],bytes:g.length,width:_,height:ee,dataUrl:P(g,M[c]),kind:`embedded`})}}}return{images:f,truncated:p,skipped:m}}function I(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=n,r.readAsDataURL(e)})}async function Ve({data:e,width:t,height:n}){let r=new OffscreenCanvas(t,n);return r.getContext(`2d`).putImageData(new ImageData(new Uint8ClampedArray(e),t,n),0,0),await I(await r.convertToBlob({type:`image/png`}))}async function He(e,t=1.5){let n=e.getViewport({scale:t}),r=new OffscreenCanvas(Math.floor(n.width),Math.floor(n.height)),i=r.getContext(`2d`);await e.render({canvasContext:i,viewport:n}).promise;let a=i.getImageData(0,0,r.width,r.height).data;for(let e=0;e<4;e++)for(let t=0;t<4;t++){let n=Math.floor(r.width*(t+.5)/4),i=(Math.floor(r.height*(e+.5)/4)*r.width+n)*4;if(a[i]<245||a[i+1]<245||a[i+2]<245)return{dataUrl:await I(await r.convertToBlob({type:`image/jpeg`,quality:.7})),width:r.width,height:r.height}}return{dataUrl:``,width:r.width,height:r.height,blank:!0}}async function Ue(e){let t=new OffscreenCanvas(e.width,e.height);return t.getContext(`2d`).drawImage(e,0,0),await I(await t.convertToBlob({type:`image/png`}))}async function We(e,t){return await new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`image obj timeout`)),1e4);e.objs.get(t,e=>{clearTimeout(i),n(e)})})}async function Ge(e){let t=await e;return t?t.bitmap?{bitmap:t.bitmap,width:t.bitmap.width,height:t.bitmap.height}:t.data&&t.width&&t.height&&t.data.length===t.width*t.height*4?{data:t.data,width:t.width,height:t.height}:null:null}async function Ke(t,n={},i={}){let a=i.encodeRgbaToPng||Ve,o=i.renderPageToJpeg||He,s=n.maxImages||j.MAX_IMAGES,c=await A(()=>import(`./pdf-DnVqBaAN.js`).then(t=>e(t.default,1)),__vite__mapDeps([2,1,3]));c.GlobalWorkerOptions.workerSrc=`libs/pdf.worker.min.js`;let l=await c.getDocument({data:await t.arrayBuffer()}).promise,u=[],d=0,f=0,p=new Set;for(let e=1;e<=l.numPages;e++){if(u.length>=s){d++;continue}let t=await l.getPage(e),n=await t.getOperatorList(),i=0;for(let o=0;o<n.fnArray.length;o++){let l=n.fnArray[o];if(!(l!==c.OPS.paintImageXObject&&l!==c.OPS.paintInlineImageXObject)){if(u.length>=s){d++;continue}try{let r=n.argsArray[o][0],s=await Ge(typeof r==`string`?await We(t,r):r);if(!s){f++;continue}let c=s.bitmap?`bm:${s.width}x${s.height}`:`${s.width}x${s.height}:${s.data.length}`;if(p.has(c))continue;p.add(c);let l=s.bitmap?await Ue(s.bitmap):await a(s);u.push({index:u.length+1,page:e,mimeType:`image/png`,bytes:N(l),width:s.width,height:s.height,dataUrl:l,kind:`embedded`}),i++}catch(e){r.warn(`doc-images: pdf obj resolve failed`,String(e?.message||e)),f++}}}if(i===0&&((await t.getTextContent()).items||[]).reduce((e,t)=>e+(t&&t.str||``).length,0)<j.SCANNED_PAGE_TEXT_THRESHOLD)try{let n=await o(t);!n.blank&&n.dataUrl&&u.push({index:u.length+1,page:e,mimeType:`image/jpeg`,bytes:N(n.dataUrl),width:n.width,height:n.height,dataUrl:n.dataUrl,kind:`scanned-page`})}catch(e){r.warn(`doc-images: page render failed`,String(e?.message||e)),f++}}return{images:u,truncated:d,skipped:f}}async function qe(e,t,n){let r=await fetch(e),i=await createImageBitmap(await r.blob()),a=Math.min(1,t/Math.max(i.width,i.height)),o=new OffscreenCanvas(Math.round(i.width*a),Math.round(i.height*a));return o.getContext(`2d`).drawImage(i,0,0,o.width,o.height),{dataUrl:await I(await o.convertToBlob({type:`image/jpeg`,quality:n})),width:o.width,height:o.height}}async function Je(e,t={}){let n=t.toJpeg||qe,r=1024,i=.65;for(let t=0;t<5;t++){let t;try{t=await n(e,r,i)}catch{return null}if(!t||!t.dataUrl)return null;if(N(t.dataUrl)<=j.MAX_IMAGE_BYTES)return t.dataUrl;i>.3?i=Math.round((i-.15)*100)/100:r=Math.floor(r*.75)}return null}async function Ye(){let e=await new Promise(e=>chrome.storage.local.get([`imageApiBase`,`imageApiKey`,`imageModelName`,`apiBase`,`apiKey`,`modelName`],e));return{apiBase:e.imageApiBase||e.apiBase||``,apiKey:i(e.imageApiKey)||i(e.apiKey)||``,model:e.imageModelName||e.modelName||``}}async function Xe(e,t=j.DESCRIBE_LIMIT,i){let a={};if(!e||e.length===0)return a;let{apiBase:o,apiKey:s,model:c}=await Ye(),l=e.filter(e=>e.dataUrl).slice(0,t),u=(e,t)=>{if(a[e]=t,i)try{i(e,t)}catch{}};return o?(await Promise.all(l.map(async e=>{let t=new AbortController,i=setTimeout(()=>t.abort(),6e4);try{let r={"Content-Type":`application/json`};s&&(r.Authorization=`Bearer ${s}`);let{ok:i,data:a}=await E(`${o}/chat/completions`,{headers:r,body:{model:c,max_tokens:800,messages:[{role:`user`,content:[{type:`text`,text:n(`docImages.describePrompt`)},{type:`image_url`,image_url:{url:e.dataUrl,detail:`auto`}}]}]},useStream:await T(),signal:t.signal});u(e.index,i&&a.choices?.[0]?.message?.content||null)}catch(t){r.warn(`doc-images: describe failed`,String(t?.message||t)),u(e.index,null)}finally{clearTimeout(i)}})),a):(l.forEach(e=>u(e.index,null)),a)}function Ze(e,t){let r=e.images||[];if(r.length===0)return``;let i=e.imageDescriptions||{},a=r.filter(e=>i[e.index]).length,o=[n(`docImages.header`,{total:r.length,described:a})];for(let e of r){let r=e.page?n(`docImages.page`,{page:e.page}):e.sheet?n(`docImages.sheetLoc`,{sheet:e.sheet,cell:e.cell||``}):``;i[e.index]?o.push(n(`docImages.lineDescribed`,{index:e.index,loc:r,desc:String(i[e.index]).trim()})):o.push(n(`docImages.lineTool`,{index:e.index,loc:r,file:t}))}return e.truncated>0&&o.push(n(`docImages.truncated`,{count:e.truncated})),`
79
-
80
- `+o.join(`
81
- `)}function L(e){let t=e.images||[],n=e.imageDescriptions||{},r=t.filter(e=>n[e.index]).length,i=t.filter(e=>!n[e.index]&&!e.overLimit&&(e.dataUrl||e.path)).length;return{described:r,total:t.length,deepReadable:i}}function Qe(e){if(e.imageStatus===`error`)return n(`docImages.previewFail`);let{described:t,total:r,deepReadable:i}=L(e),a=n(`docImages.previewDescribed`,{described:t,total:r});return i>0&&(a+=n(`docImages.previewDeepReadable`,{count:i})),a}function $e(e){if(e.imageStatus===`error`)return n(`docImages.previewFail`);let{described:t,total:r,deepReadable:i}=L(e),a=n(`docImages.previewCompact`,{described:t,total:r});return i>0&&(a+=n(`docImages.previewCompactDeep`,{count:i})),a}var R=`_docImageSnapshot`;function et(e){return e.files.reduce((e,t)=>e+(t.imageSource===`local`?t.images.reduce((e,t)=>e+(t.dataUrl?N(t.dataUrl):0),0):0),0)}async function tt(e,t){let n=(await new Promise(e=>chrome.storage.local.get([R],e)))[R]||{},r=(t||[]).filter(e=>e.status===`done`&&(e.images||[]).length>0);if(r.length===0)delete n[e];else{n[e]={updatedAt:Date.now(),files:r.map(e=>({name:e.name,imageSource:e.imageSource,images:e.images.map(e=>{let t={index:e.index,page:e.page??null};return e.path&&(t.path=e.path),e.dataUrl&&(t.dataUrl=e.dataUrl),t})}))};let t=()=>Object.values(n).reduce((e,t)=>e+et(t),0);for(;t()>j.SNAPSHOT_BUDGET&&Object.keys(n).length>1;){let t=Object.entries(n).filter(([t])=>t!==e).sort((e,t)=>e[1].updatedAt-t[1].updatedAt)[0];if(!t)break;delete n[t[0]]}t()>j.SNAPSHOT_BUDGET&&n[e]&&n[e].files.forEach(e=>{e.imageSource===`local`&&e.images.forEach(e=>{delete e.dataUrl})})}await new Promise(e=>chrome.storage.local.set({[R]:n},e))}async function nt(e){let t=(await new Promise(e=>chrome.storage.local.get([R],e)))[R]||{};t[e]&&(delete t[e],await new Promise(e=>chrome.storage.local.set({[R]:t},e)))}var z=new Set,B=new Set,V=[],H=`deepseek-v4-pro`,U=null,W=[],G=!0,K=!0,q=null,rt=!1,it=null,at=``,ot=``,st=[],ct=-1,lt=-1,ut=[],dt=[],ft=-1,pt=null,mt=-1,ht=[],gt=-1,_t=`prompts`,vt=`prompts`,yt=!1,bt=-1,xt=-1,St=-1,Ct=null,wt=``,Tt=[],Et=-1,Dt=null,Ot=null,kt=null,At=null,jt=[],Mt={platformName:`Unknown`,platform:`unknown`,arch:`unknown`,shell:`/bin/sh`,homeDir:`/home/user`,workdir:``,connected:!1},Nt={maxMemoryMessages:20,enableExecutionLog:!1,showMessageTimestamp:!0,autoCompaction:!1,autoCompactionThreshold:.85,persistSummaryToMemory:!0},Pt=.2,Ft=1,It=0,Lt=`all`,Rt=``,zt=[],Bt=[],Vt={},J=new Map,Ht=null,Y=new Map,Ut=new Set,Wt=new Map,Gt=null,Kt=null,qt=null,Jt=null,Yt=null,Xt=3e5,Zt=null,Qt=!1,$t=null,en=[],tn=``,nn=null,rn=0,an=0,on=-1,sn=!1,cn=``,ln=``,un=``,dn=[],fn=!0,pn=[],mn=new Map,hn=new Map,gn=new Map,_n=new Map,vn=!1,yn=!1,bn=new Map,X={get isGenerating(){return z.has(U)},set isGenerating(e){e?z.add(U):z.delete(U),document.dispatchEvent(new CustomEvent(`generating-state-changed`))},get generatingSessionIds(){return z},get completedSessionIds(){return B},set completedSessionIds(e){B=e},get messageHistory(){return V},set messageHistory(e){V=e},get currentModel(){return H},set currentModel(e){H=e},get activeSessionId(){return U},set activeSessionId(e){U=e},get sessions(){return W},set sessions(e){W=e},get useTools(){return G},set useTools(e){G=e},get isolateChat(){return K},set isolateChat(e){K=e},get activeCompaction(){return q},set activeCompaction(e){q=e},get enableSelectionQuery(){return rt},set enableSelectionQuery(e){rt=e},get currentTabId(){return it},set currentTabId(e){it=e},get selectedContextText(){return at},set selectedContextText(e){at=e},get quotedContextText(){return ot},set quotedContextText(e){ot=e},get customPrompts(){return st},set customPrompts(e){st=e},get selectedPromptIndex(){return ct},set selectedPromptIndex(e){ct=e},get selectedSkillIndex(){return lt},set selectedSkillIndex(e){lt=e},get selectedSkills(){return ut},set selectedSkills(e){ut=e},get selectedMcpServices(){return dt},set selectedMcpServices(e){dt=e},get selectedMcpServiceIndex(){return ft},set selectedMcpServiceIndex(e){ft=e},get selectedPage(){return pt},set selectedPage(e){pt=e},get selectedPageIndex(){return mt},set selectedPageIndex(e){mt=e},get knowledgeRefs(){return ht},set knowledgeRefs(e){ht=e},get selectedKnowledgeAtIndex(){return gt},set selectedKnowledgeAtIndex(e){gt=e},get activeDropdownTab(){return _t},set activeDropdownTab(e){_t=e},get lastActiveDropdownTab(){return vt},set lastActiveDropdownTab(e){vt=e},get showMergedList(){return yt},set showMergedList(e){yt=e},get selectedAgentAtIndex(){return bt},set selectedAgentAtIndex(e){bt=e},get selectedProxyAtIndex(){return xt},set selectedProxyAtIndex(e){xt=e},get selectedFileAtIndex(){return St},set selectedFileAtIndex(e){St=e},get draggedItemIndex(){return Ct},set draggedItemIndex(e){Ct=e},get systemPrompt(){return wt},set systemPrompt(e){wt=e},get activeAgentId(){return Dt},set activeAgentId(e){Dt=e},get activeAgentToolIds(){return Ot},set activeAgentToolIds(e){Ot=e},get activeAgentMcpExcludedServerIds(){return kt},set activeAgentMcpExcludedServerIds(e){kt=e},get activeAgentSkillIds(){return At},set activeAgentSkillIds(e){At=e},get customAgents(){return jt},set customAgents(e){jt=e},get agentPlatform(){return Mt},set agentPlatform(e){Object.assign(Mt,e)},get inputHistory(){return Tt},set inputHistory(e){Tt=e},get inputHistoryIndex(){return Et},set inputHistoryIndex(e){Et=e},get chatConfig(){return Nt},set chatConfig(e){Nt=e},get temperature(){return Pt},set temperature(e){Pt=e},get topP(){return Ft},set topP(e){Ft=e},get selectedTempIndex(){return It},set selectedTempIndex(e){It=e},get currentCategory(){return Lt},set currentCategory(e){Lt=e},get currentSearch(){return Rt},set currentSearch(e){Rt=e},get enabledTools(){return zt},set enabledTools(e){zt=e},get mcpClosedServers(){return Bt},set mcpClosedServers(e){Bt=e},get collapsedCategories(){return Vt},get sessionExecutionStatus(){return J},set sessionExecutionStatus(e){J=e},get currentExecutionStatus(){return J.get(U)||null},set currentExecutionStatus(e){e===null?J.delete(U):J.set(U,e)},get executionLogListener(){return Ht},set executionLogListener(e){Ht=e},get pendingCancelApi(){return Y.get(U)||null},set pendingCancelApi(e){e===null?Y.delete(U):Y.set(U,e)},get pendingCancelApiMap(){return Y},get pendingCallApiSessionIds(){return Ut},set pendingCallApiSessionIds(e){Ut=e},get substituteLoadingIds(){return Wt},set substituteLoadingIds(e){Wt=e},get currentClarifyToolCallId(){return Gt},set currentClarifyToolCallId(e){Gt=e},get currentClarifySessionId(){return Kt},set currentClarifySessionId(e){Kt=e},get currentConfirmToolCallId(){return qt},set currentConfirmToolCallId(e){qt=e},get currentConfirmSessionId(){return Jt},set currentConfirmSessionId(e){Jt=e},get clarifyTimerInterval(){return Yt},set clarifyTimerInterval(e){Yt=e},get clarifyTimeoutValue(){return Xt},set clarifyTimeoutValue(e){Xt=e},get messageTocContainer(){return Zt},set messageTocContainer(e){Zt=e},get isMouseOverToc(){return Qt},set isMouseOverToc(e){Qt=e},get tocHideTimer(){return $t},set tocHideTimer(e){$t=e},get bookmarks(){return en},set bookmarks(e){en=e},get lastSelectedText(){return tn},set lastSelectedText(e){tn=e},get currentSelectionRange(){return nn},set currentSelectionRange(e){nn=e},get lastMouseX(){return rn},set lastMouseX(e){rn=e},get lastMouseY(){return an},set lastMouseY(e){an=e},get pendingDeleteIndex(){return on},set pendingDeleteIndex(e){on=e},get enableImageInput(){return sn},set enableImageInput(e){sn=e},get imageModelName(){return cn},set imageModelName(e){cn=e},get imageApiBase(){return ln},set imageApiBase(e){ln=e},get imageApiKey(){return un},set imageApiKey(e){un=e},get attachedImages(){return dn},set attachedImages(e){dn=e},get enableFileInput(){return fn},set enableFileInput(e){fn=e},get attachedFiles(){return pn},set attachedFiles(e){pn=e},get agentVersions(){return mn},set agentVersions(e){mn=e},get agentWorkdirs(){return hn},set agentWorkdirs(e){hn=e},get agentHomeDirs(){return gn},set agentHomeDirs(e){gn=e},get agentSystemInfos(){return _n},set agentSystemInfos(e){_n=e},get isScrolling(){return vn},set isScrolling(e){vn=e},get isComposing(){return yn},set isComposing(e){yn=e},get customModelMap(){return bn},set customModelMap(e){bn=e}};t(`zh`,{session:{newSession:`新会话`,importedSession:`导入的会话`,unnamedSession:`未命名会话`,restoredSession:`恢复的会话`,forkSuffix:`分叉`,sourceNotFound:`源会话不存在`,scheduledSession:`定时任务`}}),t(`en`,{session:{newSession:`New session`,importedSession:`Imported session`,unnamedSession:`Unnamed session`,restoredSession:`Restored session`,forkSuffix:`Fork`,sourceNotFound:`Source session not found`,scheduledSession:`Scheduled task`}});async function xn(e){try{await S(e)}catch(e){r.warn(`[session-store] cleanup ReAct checkpoint failed:`,e)}}var Z=!1;async function Q(){Z||(await le(),Z=!0,Sn())}async function Sn(){try{let e=await m(),t=new Set(e.map(e=>e.id));t.add(`default`);let n=await chrome.storage.local.get(null),i=Object.keys(n).filter(e=>e.startsWith(`scrollPosition_`)&&!t.has(e.slice(15)));i.length>0&&(await chrome.storage.local.remove(i),r.debug(`[session-store] cleanup ${i.length} orphan scrollPosition key:`,i))}catch(e){r.warn(`[session-store] cleanup orphaned scrollPosition failed:`,e)}}async function Cn(){await Q();let[e,t]=await Promise.all([m(),v()]);return e.sort((e,t)=>e.order!==void 0&&t.order!==void 0?e.order-t.order:e.order===void 0?t.order===void 0?new Date(e.createdAt)-new Date(t.createdAt):1:-1),{activeSessionId:t,list:e}}function wn(e){return typeof e==`string`?e:Array.isArray(e)?e.filter(e=>e.type===`text`).map(e=>e.text).join(``):``}async function Tn(){if(!X.activeSessionId)return!1;let e=await h(X.activeSessionId);if(!e)return r.warn(`[SessionStore] saveCurrentSession cannot find currentsession:`,X.activeSessionId),!1;if(e.model=X.currentModel,e.useTools=X.useTools,e.enabledTools=[...X.enabledTools],e.agentId=X.activeAgentId||null,e.temperature=X.temperature,e.topP=X.topP,e.contextCompaction=X.activeCompaction||void 0,e.messageHistory=X.messageHistory.map(e=>({role:e.role,content:e.content||``,executionLog:e.executionLog||[],reflectionScore:e.reflectionScore,wasRevised:e.wasRevised||!1,htmlContent:e.htmlContent||void 0,messageId:e.messageId||void 0,timestamp:e.timestamp||void 0,contextBubbles:e.contextBubbles||void 0,resumable:e.resumable||!1})),e.updatedAt=new Date().toISOString(),!e.forkMetadata&&!e.titleManuallySet){let t=X.messageHistory.find(e=>e.role===`user`);t&&(e.title=wn(t.content).substring(0,50).replace(/\n/g,` `))}return await _(e)?!0:(r.error(`[SessionStore] putSession failed, sessionId:`,X.activeSessionId),!1)}async function En(){await Q();let e=$(),t={id:e,title:n(`session.newSession`),model:X.currentModel,useTools:X.useTools,enabledTools:[...X.enabledTools],agentId:X.activeAgentId||null,temperature:X.temperature,topP:X.topP,messageHistory:[],scrollPosition:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),order:Date.now(),isGenerating:!1,lastExecutionLog:[]};return await _(t),await y(e),t}async function Dn(e){await Q();let t=[];for(let r of e){let e={id:$(),title:r.title||n(`session.importedSession`),model:r.model||X.currentModel,useTools:r.useTools===void 0?!0:r.useTools,enabledTools:r.enabledTools||[...X.enabledTools],temperature:r.temperature===void 0?X.temperature:r.temperature,topP:r.topP===void 0?X.topP:r.topP,agentId:r.agentId||null,messageHistory:(r.messageHistory||[]).map(e=>({role:e.role,content:e.content||``,executionLog:e.executionLog||[],reflectionScore:e.reflectionScore,wasRevised:e.wasRevised||!1,htmlContent:e.htmlContent||void 0,messageId:e.messageId||void 0,timestamp:e.timestamp||void 0})),scrollPosition:0,createdAt:r.createdAt||new Date().toISOString(),updatedAt:new Date().toISOString(),order:Date.now()+t.length,isGenerating:!1,lastExecutionLog:[]};await _(e),t.push(e)}return!await v()&&t.length>0&&await y(t[0].id),t}async function On(e,t){let n=await h(e);return n?(n.messageHistory=n.messageHistory||[],n.messageHistory.push({role:t.role,content:t.content||``,executionLog:t.executionLog||[],reflectionScore:t.reflectionScore,wasRevised:t.wasRevised||!1,htmlContent:t.htmlContent||void 0,messageId:t.messageId||void 0,timestamp:t.timestamp||void 0,contextBubbles:t.contextBubbles||void 0}),n.updatedAt=new Date().toISOString(),n.isGenerating=!1,await _(n),!0):!1}function $(){return`sess_`+Date.now().toString(36)+`_`+Math.random().toString(36).substring(2,8)}async function kn(e){if(e===X.activeSessionId)return;let t=Tn(),n=chrome.storage.local.get([`modelName`,`temperature`,`topP`]).catch(()=>({})),[i]=await Promise.all([h(e),t]);if(!i)return r.error(`[SessionStore] find not to session:`,e),!1;if(await y(e),X.activeSessionId=e,X.messageHistory=i.messageHistory||[],X.activeCompaction=i.contextCompaction||null,X.currentModel=i.model||X.currentModel,X.temperature=i.temperature===void 0?X.temperature:i.temperature,X.topP=i.topP===void 0?X.topP:i.topP,X.useTools=i.useTools===void 0?X.useTools:i.useTools,X.activeAgentId=i.agentId||null,i.agentId?chrome.storage.local.set({activeAssistantId:i.agentId}):chrome.storage.local.remove(`activeAssistantId`),i.agentId&&i.agentId!=="default")try{let{getAgent:e}=await A(async()=>{let{getAgent:e}=await import(`./agent-store-BvS-vIQr.js`).then(e=>e.t);return{getAgent:e}},__vite__mapDeps([4,1,5])),t=await e(i.agentId);t&&(t.model&&(X.currentModel=t.model),t.temperature!==null&&t.temperature!==void 0&&(X.temperature=t.temperature,X.topP=t.topP!==null&&t.topP!==void 0?t.topP:1),document.dispatchEvent(new CustomEvent(`agent-model-changed`)))}catch{}else{let e=await n;e.modelName&&(X.currentModel=e.modelName),e.temperature!==void 0&&(X.temperature=e.temperature),e.topP!==void 0&&(X.topP=e.topP),document.dispatchEvent(new CustomEvent(`agent-model-changed`))}return i.isGenerating&&X.pendingCallApiSessionIds.has(e)?X.generatingSessionIds.add(e):i.isGenerating&&(r.debug(`[SessionStore] detected expiredperiod isGenerating mark,async cleanup:`,e),(async()=>{try{let t=await h(e);t&&(t.isGenerating=!1,await _(t))}catch(e){r.warn(`[SessionStore] cleanup expired isGenerating mark failed:`,e)}})()),i}async function An(e){let t=await m(),n=await v();try{await nt(e)}catch{}await ee(e),chrome.storage.local.remove(`scrollPosition_`+e),await xn(e);try{let t=(await C()).filter(t=>t.sessionId===e);for(let e of t)await w(e.id);t.length>0&&r.info(`[SessionStore] cleaned ${t.length} bookmark (session ${e} deleted)`)}catch(e){r.warn(`[SessionStore] cleanup bookmarks failed:`,e)}if(n===e){let n=[...t].sort((e,t)=>e.order!==void 0&&t.order!==void 0?e.order-t.order:e.order===void 0?t.order===void 0?new Date(e.createdAt)-new Date(t.createdAt):1:-1),r=n.findIndex(t=>t.id===e),i=n.filter(t=>t.id!==e);i.length>0?await y(i[Math.min(r,i.length-1)].id):await y(null)}return!0}async function jn(e,t){let n=await h(e);return n?(n.title=t,n.titleManuallySet=!0,n.updatedAt=new Date().toISOString(),await _(n),!0):!1}async function Mn(e){let t=await m(),n=new Map(t.map(e=>[e.id,e])),r=[];return e.forEach((e,t)=>{let i=n.get(e);i&&(i.order=t,r.push(_(i)))}),await Promise.all(r),!0}async function Nn(){if(!X.messageHistory||X.messageHistory.length===0)return;let e=await h(X.activeSessionId);if(!e)return;let t=e.titleManuallySet||e.forkMetadata,r=X.messageHistory.find(e=>e.role===`user`),i=t?e.title||n(`session.unnamedSession`):r?wn(r.content).substring(0,50).replace(/\n/g,` `):e.title||n(`session.unnamedSession`),a=Date.now().toString(36)+Math.random().toString(36).substring(2,8),o=X.messageHistory.map(e=>({role:e.role,content:e.content||``,executionLog:e.executionLog||[],reflectionScore:e.reflectionScore,wasRevised:e.wasRevised||!1,htmlContent:e.htmlContent||void 0})),s=await b();s.push({id:a,title:i,createdAt:new Date().toISOString(),messages:o}),s.length>20&&s.splice(0,s.length-20),await x(s);let c=await En();return await An(e.id),await kn(c.id),!0}async function Pn(e,t=null){await Q();let r=await h(e);if(!r)throw Error(n(`session.sourceNotFound`));let i=$(),a=new Date().toISOString(),o=r.messageHistory||[],s=!1;if(t){let e=o.findIndex(e=>e.messageId===t);e>=0&&(o=o.slice(0,e+1),s=!0)}let c=o.map(e=>({...e,executionLog:Array.isArray(e.executionLog)?[...e.executionLog]:[],contextBubbles:Array.isArray(e.contextBubbles)?[...e.contextBubbles]:void 0,messageId:`msg_`+Date.now().toString(36)+`_`+Math.random().toString(36).substring(2,8)})),l={...r,id:i,title:`${r.title||n(`session.newSession`)} - ${n(`session.forkSuffix`)}`,messageHistory:c,isGenerating:!1,lastExecutionLog:[],scrollPosition:0,createdAt:a,updatedAt:a,order:Date.now(),forkMetadata:{sourceSessionId:e,forkedAt:a,...s?{upToMessageId:t}:{}}};return await _(l),await y(i),l}async function Fn(e){await Q();let t={id:$(),title:e.name||n(`session.scheduledSession`),model:e.model||null,useTools:e.useTools==null?null:e.useTools,enabledTools:null,agentId:e.agentId||null,temperature:e.temperature==null?null:e.temperature,topP:e.topP==null?null:e.topP,messageHistory:[],scrollPosition:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),order:Date.now(),isGenerating:!1,lastExecutionLog:[],scheduledTaskId:e.id};return await _(t),t}export{de as $,Oe as A,pe as B,tt as C,Me as D,Ne as E,Ae as F,ae as G,g as H,we as I,C as J,le as K,E as L,ke as M,Te as N,Pe as O,je as P,se as Q,T as R,Be as S,Fe as T,S as U,w as V,ye as W,_e as X,fe as Y,m as Z,Qe as _,An as a,ve as at,Re as b,Cn as c,oe as ct,Tn as d,ge as et,kn as f,$e as g,Ze as h,En as i,me as it,Ee as j,De as k,jn as l,he as lt,j as m,Nn as n,re as nt,Pn as o,ue as ot,X as p,v as q,Fn as r,ie as rt,Dn as s,ne as st,On as t,h as tt,Mn as u,Je as v,A as w,Ke as x,Xe as y,be as z};