ai-helper-agent 1.15.1 → 1.15.3

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.
Files changed (35) hide show
  1. package/dist/assets/agent-defaults-BEgEbjSw.js +99 -0
  2. package/dist/assets/{agent-defaults-Cw_XUmbA.js.map → agent-defaults-BEgEbjSw.js.map} +1 -1
  3. package/dist/assets/agent-store-BRqpVAvZ.js +2 -0
  4. package/dist/assets/{agent-store-BZ9Te0tA.js.map → agent-store-BRqpVAvZ.js.map} +1 -1
  5. package/dist/assets/background.js +29 -29
  6. package/dist/assets/background.js.map +1 -1
  7. package/dist/assets/constants-DBNqocFG.js.map +1 -1
  8. package/dist/assets/content.js +23 -23
  9. package/dist/assets/{i18n-BpdX387O.js → i18n-BeZarAZC.js} +3 -3
  10. package/dist/assets/i18n-BeZarAZC.js.map +1 -0
  11. package/dist/assets/{marked.min.js-D2rXgLAQ.js → marked.min.js-08SGy6CO.js} +7 -7
  12. package/dist/assets/{marked.min.js-D2rXgLAQ.js.map → marked.min.js-08SGy6CO.js.map} +1 -1
  13. package/dist/assets/{marked.min.js-loader-tKH5SQVQ.js → marked.min.js-loader-4kRZ9iCP.js} +1 -1
  14. package/dist/assets/{modulepreload-polyfill-Dezn_h7o.js → modulepreload-polyfill-P2Xu9kJm.js} +1 -1
  15. package/dist/assets/options.js +6 -6
  16. package/dist/assets/options.js.map +1 -1
  17. package/dist/assets/rolldown-runtime-C0FnF6B9.js +1 -0
  18. package/dist/assets/{session-manager-XjbvsS5R.js → session-manager-Cm411zzN.js} +5 -5
  19. package/dist/assets/session-manager-Cm411zzN.js.map +1 -0
  20. package/dist/assets/session-manager-ui-DEt85VFn.js +71 -0
  21. package/dist/assets/session-manager-ui-DEt85VFn.js.map +1 -0
  22. package/dist/assets/side_panel.css +1 -1
  23. package/dist/assets/side_panel.js +149 -143
  24. package/dist/assets/side_panel.js.map +1 -1
  25. package/dist/offscreen/offscreen.js +2 -2
  26. package/dist/options.html +2 -2
  27. package/dist/side_panel.html +26 -10
  28. package/package.json +1 -1
  29. package/dist/assets/agent-defaults-Cw_XUmbA.js +0 -97
  30. package/dist/assets/agent-store-BZ9Te0tA.js +0 -2
  31. package/dist/assets/chunk-CMxvf4Kt.js +0 -1
  32. package/dist/assets/i18n-BpdX387O.js.map +0 -1
  33. package/dist/assets/session-manager-XjbvsS5R.js.map +0 -1
  34. package/dist/assets/session-manager-ui-BVXQLbJ3.js +0 -71
  35. package/dist/assets/session-manager-ui-BVXQLbJ3.js.map +0 -1
@@ -0,0 +1,99 @@
1
+ import{a as e,c as t,l as n}from"./i18n-BeZarAZC.js";e(`zh`,{tokenCounter:{truncatedMiddle:`
2
+
3
+ ... [中间 {tokens} tokens 已截断] ...
4
+
5
+ `,omittedTokens:`
6
+
7
+ ... [省略 {tokens} tokens] ...
8
+
9
+ `,omittedMiddleHtml:`
10
+ <!-- 省略中间内容 -->
11
+ `,truncated:`[截断]`,omittedKey:`...[省略]`,moreFields:`还有 {count} 个字段`,unknownTool:`未知工具`,userQuestion:`- 用户问题:{question}`,usedTools:`- 使用的工具:{tools}`,historySummary:`[历史摘要]`}}),e(`en`,{tokenCounter:{truncatedMiddle:`
12
+
13
+ ... [middle {tokens} tokens truncated] ...
14
+
15
+ `,omittedTokens:`
16
+
17
+ ... [{tokens} tokens omitted] ...
18
+
19
+ `,omittedMiddleHtml:`
20
+ <!-- middle content omitted -->
21
+ `,truncated:`[truncated]`,omittedKey:`...[omitted]`,moreFields:`{count} more fields`,unknownTool:`Unknown tool`,userQuestion:`- User question: {question}`,usedTools:`- Tools used: {tools}`,historySummary:`[History Summary]`}});var r=/[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]/g,i=1.5,a=4,o=4,s=85,c=170,l=512;function u(e){if(!e)return s;let t=Number(e.width),n=Number(e.height);if(t>0&&n>0)return s+c*(Math.ceil(t/l)*Math.ceil(n/l));let r=e.url||``,i=(r.split(`,`)[1]||r).length*3/4;return Math.max(s,Math.ceil(i/65))}var d=1,f=0,p=3,m=.3,h=3;function ee(e,t){if(!t||t<=0||!e||e<=0)return;let r=t/e;if(r<m||r>h){n.warn(`[TokenCounter] calibration ratioexception,ignore: estimated=${e}, actual=${t}, ratio=${r.toFixed(3)}`);return}f++;let i=Math.min(.3,1/f),a=d;d=d*(1-i)+r*i,n.debug(`[TokenCounter] Tokencalibration update: ratio=${r.toFixed(3)}, alpha=${i.toFixed(3)}, old=${a.toFixed(3)} → new=${d.toFixed(3)}, samples=${f}`)}function te(e){return f<p||d<=0?e:Math.ceil(e*d)}function g(){return{factor:d,samples:f,active:f>=p}}function _(e){if(!e||typeof e!=`string`)return 0;let t=e.match(r),n=t?t.length:0,o=e.length-n;return Math.ceil(n/i+o/a)}function v(e){return!e||e.length===0?0:e.reduce((e,t)=>{let n=0;if(typeof t.content==`string`)n=_(t.content);else if(Array.isArray(t.content))for(let e of t.content)e&&(e.type===`text`?n+=_(e.text||``):e.type===`image_url`&&e.image_url?n+=u(e.image_url):n+=_(JSON.stringify(e)));else t.content&&(n=_(JSON.stringify(t.content)));let r=``;return t.tool_calls&&(r+=JSON.stringify(t.tool_calls)),t.tool_call_id&&(r+=t.tool_call_id),t.reasoning_content&&(r+=t.reasoning_content),r&&(n+=_(r)),e+n+o},0)}function y(e,n){if(!e||typeof e!=`string`)return e;let r=_(e);if(r<=n)return e;let i=Math.floor(n*.7),o=n-i,s=Math.floor(i*a),c=Math.floor(o*a),l=e.slice(0,s),u=e.slice(-c),d=r-n;return l+t(`tokenCounter.truncatedMiddle`,{tokens:d})+u}function b(e,n,r){if(!e||typeof e!=`string`||_(e)<=n)return e;if(!r){let t=e.trim();r=t.startsWith(`{`)||t.startsWith(`[`)?`json`:/<(!DOCTYPE|html|head|body)[\s>]/i.test(t.substring(0,200))?`html`:`text`}if(r===`html`)return ne(e,n);if(r===`json`)return re(e,n);let i=Math.floor(n*.6*a),o=Math.floor(n*.2*a),s=e.slice(0,i),c=e.slice(-o);return s+t(`tokenCounter.omittedTokens`,{tokens:_(e)-n})+c}function ne(e,n){let r=e.match(/<body[\s>][\s\S]*<\/body>/i);if(r){let i=r[0];e.substring(0,e.indexOf(i));let o=Math.floor(n*.8),s=n-o,c=Math.floor(s*a),l=Math.floor(o*a);return e.slice(0,c)+i.slice(0,l)+t(`tokenCounter.omittedMiddleHtml`)+i.slice(-Math.floor(l*.3))+e.slice(-Math.floor(c*.3))}return y(e,n)}function re(e,n){try{let r=JSON.parse(e);if(typeof r!=`object`||!r)return y(e,n);let i={},o=Object.keys(r),s=Math.min(o.length,30);for(let e=0;e<s;e++){let n=o[e],a=r[n];i[n]=typeof a==`string`&&a.length>200?a.substring(0,200)+`...`+t(`tokenCounter.truncated`):typeof a==`object`&&a?`[${Array.isArray(a)?`Array(${a.length})`:`Object(${Object.keys(a).length} keys)`}]`:a}o.length>s&&(i[`...[省略]`]=`还有 ${o.length-s} 个字段`);let c=JSON.stringify(i,null,2);return _(c)>n&&(c=c.substring(0,Math.floor(n*a))),c}catch{return y(e,n)}}var x={"deepseek-v4-pro":128e3,"deepseek-v3":128e3,"deepseek-chat":64e3,"deepseek-reasoner":64e3,"gpt-4o":128e3,"gpt-4o-mini":128e3,"gpt-4-turbo":128e3,"gpt-4":8192,"gpt-3.5-turbo":16385,"claude-3.5-sonnet":2e5,"claude-3-opus":2e5,"claude-3-haiku":2e5,"claude-3-sonnet":2e5,default:64e3};function S(e){let t=new Map;if(!e||!Array.isArray(e))return t;for(let n of e)typeof n!=`string`&&n&&typeof n==`object`&&n.name&&t.set(n.name,n.contextWindow||0);return t}function C(e,t,n){if(n&&n.has(e)){let t=n.get(e);if(t&&t>0)return t}return t&&t>0?t:x[e]||x.default}var w=2e3;function T(e){return e*200}var E=4096;function ie(e,t=0,n,r){return C(e,n,r)-w-T(t)-E}function ae(e,t){let n=e/t;return n<.7?{level:`safe`,ratio:n}:n<.9?{level:`warning`,ratio:n}:{level:`critical`,ratio:n}}function oe(e,t,n={}){let{preserveSystem:r=!0,generateSummary:i=!0}=n,a=e.length;if(v(e)<=t)return{messages:[...e],trimmedCount:0,summary:null};let o=r&&e[0]?.role===`system`?[e[0]]:[],s=o.length?[...e.slice(1)]:[...e],c=[];for(;s.length>0&&!(v([...o,...s])<=t);){let e=s.shift();if(c.push(e),e?.role===`assistant`&&e.tool_calls)for(;s.length>0&&s[0]?.role===`tool`;)c.push(s.shift())}let l=[...o,...s],u=i?D(c):null;return{messages:l,trimmedCount:a-l.length,summary:u}}function D(e){if(!e||e.length===0)return null;let n=[],r=[],i=[];for(let n of e)if(n.role===`user`){let e=typeof n.content==`string`?n.content:Array.isArray(n.content)?n.content.filter(e=>e.type===`text`).map(e=>e.text).join(``):``;if(e&&e.trim()){let t=e.replace(/\[选中内容\]\n[\s\S]*?\n\n\[用户问题\]\n/,``).replace(/\[引用内容\]\n[\s\S]*?\n\n\[用户问题\]\n/,``).replace(/\[选中内容摘要\]\n[\s\S]*?\n\n\[用户问题\]\n/,``).replace(/\[引用内容摘要\]\n[\s\S]*?\n\n\[用户问题\]\n/,``).trim().substring(0,80);t&&r.push(t)}}else if(n.role===`assistant`&&n.tool_calls)for(let e of n.tool_calls){let n=e.function?.name||e.name||t(`tokenCounter.unknownTool`);i.push(n)}if(r.length>0&&n.push(t(`tokenCounter.userQuestion`,{question:r[r.length-1]})),i.length>0){let e=[...new Set(i)].slice(0,10);n.push(t(`tokenCounter.usedTools`,{tools:e.join(`, `)}))}return n.length===0?null:t(`tokenCounter.historySummary`)+`
22
+ `+n.join(`
23
+ `)}function O(e){return typeof e==`string`?e.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,`�`):e}var se=new Set([`role`,`content`,`tool_calls`,`tool_call_id`,`name`,`reasoning_content`,`prefix`]);function ce(e){let t=e.map((e,t)=>{let r={};for(let t of se)t in e&&(r[t]=e[t]);return Array.isArray(r.content)&&(r.content=r.content.map(e=>{if(e&&e.type===`image_url`&&e.image_url){let t={url:e.image_url.url};return e.image_url.width!=null&&(t.width=e.image_url.width),e.image_url.height!=null&&(t.height=e.image_url.height),{...e,image_url:t}}return e&&e.type===`text`&&typeof e.text==`string`?{...e,text:O(e.text)}:e})),typeof r.content==`string`&&(r.content=O(r.content)),r.role===`tool`?r.tool_call_id?r:(n.warn(`[Background] foundmessage ${t} missing tool_call_id,skipped`,e),null):(r.role===`assistant`&&Array.isArray(r.tool_calls)?r.tool_calls=r.tool_calls.map(e=>({id:e.id,type:e.type,function:e.function})):r.role===`assistant`&&r.tool_calls!==void 0&&(n.warn(`[Background] foundmessage ${t} tool_calls non-group (type: ${typeof r.tool_calls}),cleared`),delete r.tool_calls),r.role===`assistant`&&r.content===null&&(r.content=``),r)}).filter(e=>e!==null);for(let e=0;e<t.length;e++){let r=t[e];if(r?.role===`assistant`&&r.tool_calls){let i=new Set;for(let n=e+1;n<t.length&&t[n].role===`tool`;n++)i.add(t[n].tool_call_id);let a=r.tool_calls.filter(e=>i.has(e.id));if(a.length===0)n.warn(`[Background] filterApiMessages: `,e,` assistant message tool_calls no matchconfig tool response,cleared`),delete r.tool_calls,r.content||(t.splice(e,1),e--);else if(a.length<r.tool_calls.length){let t=r.tool_calls.filter(e=>!i.has(e.id));n.warn(`[Background] filterApiMessages: `,e,` assistant message`,t.length,` tool_call no corresponding response,removed,keep`,a.length,``),r.tool_calls=a}}}return t}function le(e){return!e||e.length===0?e:e.map(e=>{if(!e||!Array.isArray(e.content))return e;let t=!1,n=e.content.map(e=>e&&e.type===`image_url`&&e.image_url?(t=!0,{type:`image_url`,image_url:{url:e.image_url.url}}):e);return t?{...e,content:n}:e})}function k(e){if(typeof e==`string`)return e;if(Array.isArray(e)){let t=e.filter(e=>e.type===`text`);return t.length===1?t[0].text:t}return e}function A(e){return e==null?``:typeof e==`string`?e:Array.isArray(e)?e.filter(e=>e&&e.type===`text`&&e.text).map(e=>e.text).join(`
24
+ `):JSON.stringify(e)}var j=2e3;function M(e){if(!e)return{compressed:e,wasCompressed:!1};let t=_(e);if(t<=j)return{compressed:e,wasCompressed:!1};let r=y(e,j);return n.debug(`[TokenCounter] referenced contentcompress: ${t} → ${_(r)} tokens`),{compressed:r,wasCompressed:!0}}e(`zh`,{db:{sessionLabel:`会话 {id}`,archivedLabel:`[归档] {label}`}}),e(`en`,{db:{sessionLabel:`Session {id}`,archivedLabel:`[Archived] {label}`}});var N=`ai-helper-db`,P=5,F=6048e5,I=`react_checkpoint_`;function L(){return new Promise((e,t)=>{let r=indexedDB.open(N,P);r.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})}},r.onsuccess=t=>{let r=t.target.result;r.onversionchange=e=>{n.debug(`[IDB] detected versionchange event,maindynamicclosecurrent connection as allows upgrade`);try{e.target.close()}catch{}R=null},e(r)},r.onerror=e=>{n.error(`[IDB] opendatabase failed:`,e.target.error),t(e.target.error)},r.onblocked=()=>{n.warn(`[IDB] databaseupgrade blocked (other connections notclose),waitingretry...`)}})}var R=null;function z(){R&&(R=null,n.debug(`[IDB] databaseconnectionreset`))}function B(){return R||=L(),R}function V(e,t,r,i=!1){return B().then(a=>new Promise((o,s)=>{let c=null,l=!1;if(!a.objectStoreNames.contains(e)){if(n.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}l=!0;try{a.close()}catch{}z(),setTimeout(()=>{V(e,t,r,!0).then(o).catch(s)},50);return}let u;try{u=a.transaction(e,t)}catch(a){if(n.error(`[IDB] create transaction failed (${e}):`,a.message),i){l=!0,s(a);return}l=!0,z(),setTimeout(()=>{V(e,t,r,!0).then(o).catch(s)},50);return}r(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}`);n.error(`[IDB] transaction error (${e}):`,c),i?s(c):(z(),V(e,t,r,!0).then(o).catch(s))},u.onabort=()=>{l||(l=!0,i?s(Error(`Transaction aborted on ${e}`)):(z(),V(e,t,r,!0).then(o).catch(s)))}}))}function H(){return V(`sessions`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}function U(e){return V(`sessions`,`readonly`,(t,n)=>{let r=t.get(e);r.onsuccess=()=>n(r.result||null),r.onerror=()=>n(null)})}async function W(e,t){if(!e||!t)return!1;try{let n=await U(e);if(!n||!n.messageHistory)return!1;let r=n.messageHistory.findIndex(e=>(e.messageId||e.id)===t);return r!==-1&&(n.messageHistory.splice(r,1),await G(n))}catch(e){return n.error(`[DB] deleteMessageFromSession failed:`,e),!1}}function G(e){return V(`sessions`,`readwrite`,(t,n)=>{let r=t.put(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function ue(e){return V(`sessions`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function de(e){return B().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 K(){return V(`activeSession`,`readonly`,(e,t)=>{let n=e.get(`active`);n.onsuccess=()=>t(n.result?.sessionId||null),n.onerror=()=>t(null)})}function q(e){return V(`activeSession`,`readwrite`,(t,n)=>{let r=t.put({key:`active`,sessionId:e});r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function J(){return V(`archivedSessions`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}function Y(e){return B().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 fe(e){let t=Date.now(),n={...e,createdAt:e.createdAt||t,updatedAt:t};return V(`uiPrototypes`,`readwrite`,(e,t)=>{let r=e.put(n);r.onsuccess=()=>t(n),r.onerror=()=>t(null)})}function pe(e){return V(`uiPrototypes`,`readonly`,(t,n)=>{let r=t.get(e);r.onsuccess=()=>n(r.result||null),r.onerror=()=>n(null)})}function me(e=null){return V(`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 he(e){return V(`uiPrototypes`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function ge(e){return e?U(e).then(e=>{if(!e)return[];let n=e.title||t(`db.sessionLabel`,{id:e.id?.slice(0,8)});return(e.messageHistory||[]).filter(e=>e.content).map((t,r)=>({session:e.id,sessionLabel:n,index:r,role:t.role,content:t.content}))}):H().then(e=>{let n=e,r=[];return n.forEach(e=>{let n=e.title||t(`db.sessionLabel`,{id:e.id?.slice(0,8)});(e.messageHistory||[]).forEach((t,i)=>{t.content&&r.push({session:e.id,sessionLabel:n,index:i,role:t.role,content:t.content})})}),r})}function _e(){return J().then(e=>{let n=[];return e.forEach(e=>{let r=t(`db.archivedLabel`,{label:e.title||t(`db.sessionLabel`,{id:e.id?.slice(0,8)})});(e.messages||[]).forEach((t,i)=>{t.content&&n.push({session:e.id,sessionLabel:r,index:i,role:t.role,content:t.content})})}),n})}function ve(){return new Promise(e=>{chrome.storage.local.get([`sessions`,`conversationSessions`],async t=>{let r=!1;if(t.sessions?.list?.length>0){let{list:e,activeSessionId:i}=t.sessions;await de(e),i&&await q(i),r=!0,n.debug(`[IDB] migrated activesession:`,e.length,``)}t.conversationSessions?.sessions?.length>0&&(await Y(t.conversationSessions.sessions),r=!0,n.debug(`[IDB] migrated archivesession:`,t.conversationSessions.sessions.length,``)),r&&chrome.storage.local.remove([`sessions`,`conversationSessions`,`chatHistory`],()=>{n.debug(`[IDB] cleaned chrome.storage.local olddata`)}),e(r)})})}async function ye(){(await H()).length>0||await K()||await ve()}async function be(e){if(!e?.sessionId)return!1;let t=Date.now(),r={...e,updatedAt:t,createdAt:e.createdAt||t},i=I+e.sessionId,a=!1;try{await chrome.storage.local.set({[i]:r}),a=!0}catch(e){n.warn(`[Storage] chrome.storage.local save checkpoint failed:`,e.message)}let o=!1;try{o=await V(`reactCheckpoints`,`readwrite`,(e,t)=>{let n=e.put(r);n.onsuccess=()=>t(!0),n.onerror=()=>t(!1)})}catch(e){n.warn(`[Storage] IndexedDB save checkpoint failed (downgraded to chrome.storage.local):`,e.message)}return!a&&!o?(n.error(`[Storage] checkpoint save complete failed:chrome.storage.local and IndexedDB averagenon- with `),!1):!0}async function xe(e){if(!e)return null;try{let t=await V(`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=I+e;return(await chrome.storage.local.get(t))[t]||null}catch(e){return n.warn(`[Storage] chrome.storage.local read checkpoint failed:`,e.message),null}}async function X(e){if(!e)return!1;let t=!1;try{let n=I+e;await chrome.storage.local.remove(n),t=!0}catch(e){n.warn(`[Storage] chrome.storage.local delete checkpoint failed:`,e.message)}try{await V(`reactCheckpoints`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)}),t=!0}catch{}return t}async function Z(){let e=[];try{let t=await chrome.storage.local.get(null);for(let[n,r]of Object.entries(t))n.startsWith(I)&&r?.sessionId&&e.push(r)}catch(e){n.warn(`[Storage] chrome.storage.local get all checkpoint failed:`,e.message)}let t=[];try{t=await V(`reactCheckpoints`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}catch{}let r=new Map;for(let t of e)r.set(t.sessionId,t);for(let e of t)r.set(e.sessionId,e);return Array.from(r.values())}async function Se(){let e=await Z(),t=Date.now(),r=e.filter(e=>(e.updatedAt||0)<t-F);if(r.length===0)return 0;let i=0;for(let e of r)await X(e.sessionId)&&i++;return n.debug(`[IDB] cleanup ${i} expired ReAct checkpoint`),i}function Ce(){return V(`bookmarks`,`readonly`,(e,t)=>{let n=e.getAll();n.onsuccess=()=>t(n.result||[]),n.onerror=()=>t([])})}function we(e){return V(`bookmarks`,`readwrite`,(t,n)=>{let r=t.put(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function Te(e){return V(`bookmarks`,`readwrite`,(t,n)=>{let r=t.delete(e);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function Ee(e,t){return V(`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)})}var Q=`tokenStats`,De=new Set([`selection_toolbar`]);function Oe(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||128e3,contextUsageRate:e.contextWindow>0?(e.promptTokens||0)/e.contextWindow:0,callType:e.callType||`unknown`};return V(Q,`readwrite`,(e,n)=>{let r=e.put(t);r.onsuccess=()=>n(!0),r.onerror=()=>n(!1)})}function ke(e){return V(Q,`readonly`,(t,n)=>{let r=t.getAll();r.onsuccess=()=>{let t=(r.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 i=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:i.length>0?i.reduce((e,t)=>e+t,0)/i.length:0,maxContextUsageRate:i.length>0?Math.max(...i):0,minContextUsageRate:i.length>0?Math.min(...i):0,records:t.sort((e,t)=>new Date(t.timestamp)-new Date(e.timestamp)).slice(0,20)})},r.onerror=()=>n(null)})}function Ae(){return V(Q,`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&&!De.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 je(){return V(Q,`readwrite`,(e,t)=>{let n=e.clear();n.onsuccess=()=>t(!0),n.onerror=()=>t(!1)})}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}],$=[{name:`Code Review Expert`,icon:`🔍`,description:`Focused on code review and quality assurance`,systemPrompt:`You are a senior Code Review Expert. Your responsibilities:
25
+ 1. Review code for logical correctness, performance, and security
26
+ 2. Check code style, naming conventions, and best practices
27
+ 3. Identify potential bugs, memory leaks, and concurrency issues
28
+ 4. Provide actionable improvement suggestions with example code
29
+
30
+ Response principles:
31
+ - Always indicate severity (critical/moderate/suggestion)
32
+ - Provide specific code modification suggestions, avoid vague comments
33
+ - Focus on maintainability, not just functional correctness`,systemPromptZh:`你是一位资深代码审查专家。你的职责:
34
+ 1. 审查代码的逻辑正确性、性能和安全性
35
+ 2. 检查代码风格、命名规范和最佳实践
36
+ 3. 识别潜在的 Bug、内存泄漏和并发问题
37
+ 4. 提供可操作的改进建议,并附带示例代码
38
+
39
+ 回复原则:
40
+ - 始终标注严重程度(严重/中等/建议)
41
+ - 提供具体的代码修改建议,避免模糊评论
42
+ - 关注可维护性,而非仅关注功能正确性`,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:
43
+ 1. Automate web page interactions based on user needs (clicking, form filling, scrolling, etc.)
44
+ 2. Extract and analyze web page content
45
+ 3. Handle multi-step web interaction flows
46
+
47
+ Operating principles:
48
+ - Understand page structure before acting; prefer query_elements first
49
+ - Verify results after actions to ensure they take effect
50
+ - Analyze errors and try alternative approaches
51
+ - Never assume elements exist; fetch page info first when uncertain
52
+ - For dialogs (alert/confirm/prompt), call handle_dialog BEFORE the action that triggers them, then use interact_element to proceed`,systemPromptZh:`你是一位网页自动化专家。你的优势:
53
+ 1. 根据用户需求自动化网页交互(点击、表单填写、滚动等)
54
+ 2. 提取和分析网页内容
55
+ 3. 处理多步骤的网页交互流程
56
+
57
+ 操作原则:
58
+ - 行动前先理解页面结构,优先使用 query_elements
59
+ - 操作后验证结果,确保生效
60
+ - 分析错误并尝试替代方案
61
+ - 不要假设元素存在,不确定时先获取页面信息
62
+ - 涉及 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`,`drag_drop`,`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:
63
+ 1. Extract structured data from web pages (tables, lists, JSON)
64
+ 2. Analyze and summarize data patterns
65
+ 3. Present analysis results in clear formats
66
+
67
+ Analysis principles:
68
+ - Understand data structure before starting analysis
69
+ - 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)
70
+ - Support analysis results with data; avoid subjective assumptions
71
+ - Present conclusions using tables or charts`,systemPromptZh:`你是一位数据分析师。你的优势:
72
+ 1. 从网页中提取结构化数据(表格、列表、JSON)
73
+ 2. 分析和总结数据模式
74
+ 3. 以清晰格式呈现分析结果
75
+
76
+ 分析原则:
77
+ - 开始分析前先理解数据结构
78
+ - 使用最合适的提取方法(表格使用 extract_data 配合 dataType=table;链接/图片/表单等结构化数据使用 extract_data 配合 dataType=links/images/forms;纯文本/HTML 使用 page_content 配合 format=text/html)
79
+ - 用数据支撑分析结果,避免主观臆断
80
+ - 使用表格或图表呈现结论`,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:
81
+ 1. Write clear technical documentation (API docs, READMEs, user guides)
82
+ 2. Distill and summarize technical information
83
+ 3. Transform complex concepts into easy-to-understand documentation
84
+
85
+ Writing principles:
86
+ - Clear structure: Use headings, lists, and tables to organize content
87
+ - Examples first: Key concepts must include code or configuration examples
88
+ - Reader-oriented: Adjust technical depth based on target audience
89
+ - Stay concise: Avoid redundancy; every paragraph should carry information`,systemPromptZh:`你是一位技术文档专家。你的优势:
90
+ 1. 编写清晰的技术文档(API 文档、README、用户指南)
91
+ 2. 提炼和总结技术信息
92
+ 3. 将复杂概念转化为易于理解的文档
93
+
94
+ 编写原则:
95
+ - 结构清晰:使用标题、列表和表格组织内容
96
+ - 示例先行:关键概念必须附带代码或配置示例
97
+ - 面向读者:根据目标受众调整技术深度
98
+ - 保持简洁:避免冗余,每段文字都应承载信息`,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 Ne(){return`agent_`+Date.now().toString(36)+`_`+Math.random().toString(36).substring(2,6)}export{ge as A,te as B,pe as C,Y as D,G as E,v as F,le as G,C as H,_ as I,y as J,k as K,A as L,Ee as M,ae as N,be as O,M as P,ce as R,U as S,we as T,ie as U,g as V,S as W,ee as X,b as Y,Ce as _,Ae as a,_e as b,Se as c,X as d,ue as f,J as g,K as h,je as i,q as j,fe as k,Te as l,ye as m,Me as n,ke as o,he as p,oe as q,Ne as r,Oe as s,$ as t,W as u,Z as v,me as w,xe as x,H as y,D as z};
99
+ //# sourceMappingURL=agent-defaults-BEgEbjSw.js.map