ai-helper-agent 2.3.1 → 2.4.1

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 (74) hide show
  1. package/README.md +13 -3
  2. package/dist/assets/__vite-browser-external-CM3Eme-n.js +1 -0
  3. package/dist/assets/agent-store-Ce3f4Ya3.js +1 -0
  4. package/dist/assets/background.js +104 -80
  5. package/dist/assets/chat-export-CWSUeOo4.js +37 -0
  6. package/dist/assets/chunk-CMxvf4Kt.js +1 -0
  7. package/dist/assets/content.js +159 -156
  8. package/dist/assets/{dist-BQOFgIxk.js → dist-DhUTa_WT.js} +5 -6
  9. package/dist/assets/dist-LQPh1k0y.js +24 -0
  10. package/dist/assets/i18n-ouMgDZ2t.js +49 -0
  11. package/dist/assets/jszip.min-Bm_16osY.js +2 -0
  12. package/dist/assets/lib-33nIefF6.js +220 -0
  13. package/dist/assets/{marked.min.js-08SGy6CO.js → marked.min.js-D2rXgLAQ.js} +7 -8
  14. package/dist/assets/{marked.min.js-loader-4kRZ9iCP.js → marked.min.js-loader-tKH5SQVQ.js} +1 -1
  15. package/dist/assets/model-profiles-6dzdrSS4.js +24 -0
  16. package/dist/assets/network-scope-CNRYXk74.js +1 -0
  17. package/dist/assets/options-Cp1UMkjK.css +1 -0
  18. package/dist/assets/options.js +108 -102
  19. package/dist/assets/{page-snapshot-renderer-CVL6r6Kf.js → page-snapshot-renderer-j72q92KH.js} +2 -3
  20. package/dist/assets/pdf-DnVqBaAN.js +6 -0
  21. package/dist/assets/session-store-CmGs_rhh.js +76 -0
  22. package/dist/assets/side_panel.css +1 -1
  23. package/dist/assets/side_panel.js +958 -1124
  24. package/dist/assets/theme-BRAX5X2F.css +1 -0
  25. package/dist/assets/{modulepreload-polyfill-P2Xu9kJm.js → theme-CLwYsx9o.js} +1 -1
  26. package/dist/assets/utils-9i9g8vW8.js +112 -0
  27. package/dist/assets/version-BrT5Y9A7.js +1 -0
  28. package/dist/assets/xlsx-DGkz7cnk.js +105 -0
  29. package/dist/manifest.json +2 -5
  30. package/dist/offscreen/offscreen.js +7 -7
  31. package/dist/options.html +151 -75
  32. package/dist/side_panel.html +167 -137
  33. package/package.json +1 -1
  34. package/src/config.js +3 -2
  35. package/src/executor.js +99 -18
  36. package/src/locales/en.json +16 -2
  37. package/src/locales/zh.json +16 -2
  38. package/src/memory/injection.js +12 -2
  39. package/src/memory/routes.js +6 -0
  40. package/src/memory/service.js +57 -2
  41. package/src/rag/manager.js +1 -1
  42. package/src/rag/url-guard.js +27 -12
  43. package/src/security.js +433 -31
  44. package/src/server.js +28 -8
  45. package/dist/assets/agent-store-DcAs6YyA.js +0 -2
  46. package/dist/assets/agent-store-DcAs6YyA.js.map +0 -1
  47. package/dist/assets/background.js.map +0 -1
  48. package/dist/assets/dist-BQOFgIxk.js.map +0 -1
  49. package/dist/assets/i18n-C4jSRoCH.js +0 -50
  50. package/dist/assets/i18n-C4jSRoCH.js.map +0 -1
  51. package/dist/assets/jszip.min-BXqW2-9v.js +0 -3
  52. package/dist/assets/jszip.min-BXqW2-9v.js.map +0 -1
  53. package/dist/assets/lib-Bi7BFuND.js +0 -221
  54. package/dist/assets/lib-Bi7BFuND.js.map +0 -1
  55. package/dist/assets/marked.min.js-08SGy6CO.js.map +0 -1
  56. package/dist/assets/model-profiles-Dl_MsXWa.js +0 -25
  57. package/dist/assets/model-profiles-Dl_MsXWa.js.map +0 -1
  58. package/dist/assets/options-8-nu3P5K.css +0 -1
  59. package/dist/assets/options.js.map +0 -1
  60. package/dist/assets/page-snapshot-renderer-CVL6r6Kf.js.map +0 -1
  61. package/dist/assets/pdf-HiJ0icvU.js +0 -7
  62. package/dist/assets/pdf-HiJ0icvU.js.map +0 -1
  63. package/dist/assets/rolldown-runtime-C0FnF6B9.js +0 -1
  64. package/dist/assets/session-store-CzVQCgQ_.js +0 -77
  65. package/dist/assets/session-store-CzVQCgQ_.js.map +0 -1
  66. package/dist/assets/side_panel.js.map +0 -1
  67. package/dist/assets/version-CNG2KGnJ.js +0 -2
  68. package/dist/assets/version-CNG2KGnJ.js.map +0 -1
  69. package/dist/assets/xlsx-BHKh7vjA.js +0 -106
  70. package/dist/assets/xlsx-BHKh7vjA.js.map +0 -1
  71. package/dist/icons/badges/license-MIT.svg +0 -21
  72. package/dist/icons/badges/platform.svg +0 -21
  73. package/dist/icons/badges/prs-welcome.svg +0 -21
  74. package/dist/icons/badges/version.svg +0 -21
@@ -0,0 +1 @@
1
+ :root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-page:#fff;--bg-surface:#fff;--bg-elevated:#fff;--bg-subtle:#f5f7fa;--bg-sunken:#f0f2f5;--bg-disabled:#f0f0f0;--bg-hover:#0000000d;--bg-active:#667eea1f;--surface-rgb:255, 255, 255;--text-primary:#333;--text-secondary:#666;--text-tertiary:#999;--text-disabled:#bbb;--text-inverse:#fff;--text-link:#4a90d9;--text-on-brand:#fff;--brand-500:#667eea;--brand-600:#5a6fd6;--brand-700:#4c5bd4;--brand-fill:#667eea;--brand-accent:#764ba2;--brand-violet-500:#8b5cf6;--brand-violet-600:#6d28d9;--brand-soft-bg:#f0f4ff;--brand-soft-border:#c9d4f5;--brand-violet-soft-bg:#f3f1ff;--brand-violet-soft-border:#d4cfff;--brand-rgb:102, 126, 234;--brand-violet-rgb:139, 92, 246;--brand-accent-rgb:118, 75, 162;--bg-page-rgb:245, 247, 250;--brand-gradient:linear-gradient(135deg, #667eea, #764ba2);--border-subtle:#eee;--border-default:#e0e0e0;--border-strong:#ccc;--divider:#f0f0f0;--danger-500:#e53e3e;--danger-strong:#c53030;--danger-soft-text:#fc8181;--danger-soft-bg:#fef2f2;--danger-soft-border:#fecaca;--danger-rgb:229, 62, 62;--success-500:#22c55e;--success-strong:#2f855a;--success-soft-bg:#e0f5e8;--success-soft-border:#c6f0d4;--success-rgb:34, 197, 94;--warning-500:#f59e0b;--warning-strong:#b45309;--warning-text-soft:#856404;--warning-soft-bg:#fef3c7;--warning-soft-border:#fde68a;--warning-rgb:245, 158, 11;--info-500:#4a90d9;--info-strong:#1a73e8;--info-soft-bg:#e8f0fe;--info-soft-border:#d6e4ff;--info-rgb:74, 144, 217;--toast-neutral:#333;--toast-success:#2f855a;--toast-error:#e53e3e;--toast-info:#4a90d9;--toast-warning:#f59e0b;--fill-danger:#e53e3e;--fill-danger-strong:#c53030;--fill-info:#4a90d9;--fill-warning:#b45309;--scrim:#00000080;--overlay-rgb:0, 0, 0;--shadow-sm:0 1px 3px #00000014;--shadow-md:0 4px 12px #00000026;--shadow-lg:0 8px 28px #00000040;--elev-ring:0 0 0 1px var(--border-strong);--elev-pop:var(--elev-ring), 0 2px 10px rgba(var(--overlay-rgb), .14);--elev-float:var(--elev-ring), 0 10px 34px rgba(var(--overlay-rgb), .2);--elev-surface:var(--bg-elevated);--tooltip-bg:#1e1e1eeb;--scrollbar-thumb:#c1c1c1;--selection-bg:#667eea40;--mark-bg:#fff3a0;--paper:#fff;--code-bg:#2d2d2d;--code-fg:#e8e8e8}html[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-page:#16181d;--bg-surface:#1e2128;--bg-elevated:#262a33;--bg-subtle:#22262e;--bg-sunken:#12151a;--bg-disabled:#2a2f38;--bg-hover:#ffffff12;--bg-active:#8da2f229;--surface-rgb:30, 33, 40;--text-primary:#e8eaef;--text-secondary:#b8bec9;--text-tertiary:#8b93a1;--text-disabled:#6b7280;--text-inverse:#16181d;--text-link:#7fb3e8;--text-on-brand:#fff;--brand-500:#8da2f2;--brand-600:#7d92ec;--brand-700:#6d84ee;--brand-fill:#566ad3;--brand-accent:#6f4b99;--brand-violet-500:#a78bfa;--brand-violet-600:#b7a4f5;--brand-soft-bg:#232a3d;--brand-soft-border:#3d4c6e;--brand-violet-soft-bg:#2b2440;--brand-violet-soft-border:#46386b;--brand-rgb:141, 162, 242;--brand-violet-rgb:167, 139, 250;--brand-accent-rgb:111, 75, 153;--bg-page-rgb:22, 24, 29;--brand-gradient:linear-gradient(135deg, #474170 0%, #2a2340 100%);--border-subtle:#2e343d;--border-default:#3a404c;--border-strong:#4a5160;--divider:#262b33;--danger-500:#fc8181;--danger-strong:#f87171;--danger-soft-text:#fca5a5;--danger-soft-bg:#3a2628;--danger-soft-border:#57353a;--danger-rgb:252, 129, 129;--success-500:#6fdba0;--success-strong:#9ae6b4;--success-soft-bg:#1f3a2a;--success-soft-border:#375c42;--success-rgb:111, 219, 160;--warning-500:#fbbf24;--warning-strong:#d9a441;--warning-text-soft:#fcd34d;--warning-soft-bg:#3d3220;--warning-soft-border:#5f4d24;--warning-rgb:251, 191, 36;--info-500:#7fb3e8;--info-strong:#a8c8f0;--info-soft-bg:#1f2b3d;--info-soft-border:#35486b;--info-rgb:127, 179, 232;--toast-neutral:#4a5568;--toast-success:#276749;--toast-error:#9b2c2c;--toast-info:#2b6cb0;--toast-warning:#975a16;--fill-danger:#9b2c2c;--fill-danger-strong:#7f2222;--fill-info:#2b6cb0;--fill-warning:#975a16;--scrim:#000000b3;--overlay-rgb:255, 255, 255;--shadow-sm:0 1px 3px #0006;--shadow-md:0 4px 12px #00000080;--shadow-lg:0 8px 28px #0009;--tooltip-bg:#3c424e;--scrollbar-thumb:#3a404c;--selection-bg:#8da2f259;--mark-bg:#fff3a0;--paper:#fff}::selection{background:var(--selection-bg)}input[type=checkbox],input[type=radio],input[type=range],input[type=color],progress{accent-color:var(--brand-500)}html[data-theme=dark] .markdown-body{color:var(--text-primary);background-color:#0000}html[data-theme=dark] .markdown-body h1,html[data-theme=dark] .markdown-body h2,html[data-theme=dark] .markdown-body h3,html[data-theme=dark] .markdown-body h4,html[data-theme=dark] .markdown-body h5,html[data-theme=dark] .markdown-body h6,html[data-theme=dark] .markdown-body strong,html[data-theme=dark] .markdown-body b{color:var(--text-primary)}html[data-theme=dark] .markdown-body h1,html[data-theme=dark] .markdown-body h2{border-bottom-color:var(--border-default)}html[data-theme=dark] .markdown-body a{color:var(--text-link)}html[data-theme=dark] .markdown-body code{background-color:rgba(var(--overlay-rgb), .22);color:var(--text-primary)}html[data-theme=dark] .markdown-body pre{background-color:var(--bg-sunken);color:var(--text-primary)}html[data-theme=dark] .markdown-body pre code{color:inherit;background-color:#0000}html[data-theme=dark] .markdown-body kbd{background-color:var(--bg-subtle);border-color:var(--border-default);color:var(--text-primary);box-shadow:none}html[data-theme=dark] .markdown-body table th,html[data-theme=dark] .markdown-body table td{border-color:var(--border-default)}html[data-theme=dark] .markdown-body table tr{border-top-color:var(--border-default);background-color:#0000}html[data-theme=dark] .markdown-body table tr:nth-child(2n){background-color:var(--bg-subtle)}html[data-theme=dark] .markdown-body blockquote{color:var(--text-secondary);border-left-color:var(--border-default)}html[data-theme=dark] .markdown-body hr{background-color:var(--border-default);border-bottom-color:#0000}html[data-theme=dark] .markdown-body del{color:var(--text-tertiary)}
@@ -1 +1 @@
1
- (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();
1
+ (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();
@@ -0,0 +1,112 @@
1
+ import{a as e,c as t,l as n,r}from"./i18n-ouMgDZ2t.js";import{Q as i,b as a}from"./model-profiles-6dzdrSS4.js";import{m as o}from"./session-store-CmGs_rhh.js";import{o as s}from"./agent-store-Ce3f4Ya3.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
+ - store: subAction=add需type+content,update需memoryId+type,**delete仅需memoryId无需type**。**删除前先recall查id**
3
+ - recall: query用关键词(如"考试"),不用完整句子。可选memoryType和limit
4
+ - manage: subAction=review审查价值,compact清理低价值
5
+ - 存长期价值信息,加tags和importance(1-10)便于检索
6
+ - importance语义:8-10=跨对话高频相关(环境约束/技术偏好/工作习惯),会常驻系统提示词;5-7=窄场景重要信息(项目详情/配置记录),按需召回;1-4=低价值
7
+ - 不存凭据原文(密码/授权码/密钥),只存位置指针(如"授权码存于 xxx/.env")`,importanceLabel:`重要性`,tagsLabel:`标签`,permanentNotesTitle:`## 永久注意事项`,permanentNotesMore:`> 另有 {count} 条历史记忆(涵盖:{topics} 等主题)。回答涉及本机环境、已装工具/技能、历史项目、个人偏好或过往记录的问题前,先调用 agent_memory 检索(action=recall)再作答;不确定时宁可多召回一次。`,permanentNotesMoreNoTopics:`> 另有 {count} 条历史记忆。回答涉及本机环境、已装工具/技能、历史项目、个人偏好或过往记录的问题前,先调用 agent_memory 检索(action=recall)再作答;不确定时宁可多召回一次。`,currentEnvTitle:`## 当前环境`,currentTimeLabel:`当前时间:`,browserLabel:`浏览器:Chrome 扩展 (Side Panel)`,defaultPromptIntro:`AI Helper:IT技术助手。`,capabilityTitle:`## 能力`,capabilityDesc:`编程开发与调试(Java/Python/JavaScript/Go/C++)、架构优化、性能调优、代码审查、文档编写、浏览器工具调用`,taskPlanningJoin:`、任务规划`,requirementTitle:`## 要求`,requirementDesc:`精准技术术语,代码示例可运行,Markdown格式,方案可落地,不生成安全违规代码`,envTitle:`## 环境`}}),e(`en`,{util:{cmdHintPowerShell:"(Use PowerShell syntax, e.g. `Get-ChildItem`, `Set-Content`, `Remove-Item`, etc.)",cmdHintCmd:"(Use CMD syntax, e.g. `dir`, `echo`, `del`, etc.)",cmdHintGitBash:"(Use Unix commands, e.g. `ls`, `cat`, `rm`, etc. Use forward slashes `/` for paths)",cmdHintPowerShellShort:`(Use PowerShell syntax)`,cmdHintUnix:"(Use Unix commands, e.g. `ls`, `cat`, `rm`, etc.)",cmdExecEnvTitle:`## Command Execution Environment`,cmdExecOsShell:`**OS/Shell**`,cmdExecWorkdir:`Working directory`,cmdExecWorkdirUnset:`not set`,assistantTerm:`- **Assistant**: An AI agent created by the user. Each assistant has its own system prompt and tool permissions, and can work independently or be dispatched by other assistants to perform subtasks`,noDesc:`No description`,subDispatchTitle:`## Sub-assistant Dispatch`,subDispatchDesc:`Use dispatch_task(subAgentId, task) to dispatch subtasks to other assistants. Parallel calls are supported.`,subDispatchAvailable:`Available sub-assistants:`,agentTerm:`- **Agent**: A remote execution service that provides file operations, command execution, and other capabilities. Use the manage_agent tool to query or switch agents`,agentHostLabel:`- Agent host: `,agentHostHint:`(Please use this address first when accessing agent services)`,terminologyTitle:`## Terminology`,taskPlanningTitle:`## Task Decomposition`,taskPlanningDesc:`Break down complex tasks (multi-step, with dependencies) into subtasks — typically 2-6, at most 8; execute simple tasks (doable in 1-2 steps) directly and never split just to hit a count. Use plan_task(taskDescription, subtasks) to submit the plan. Important: when calling plan_task, call it alone — do not return other tool calls in the same turn; put any other intended actions into the subtask descriptions for the subtasks to execute.`,artifactDeclTitle:`## File Artifact Declaration`,artifactDeclDesc:`When this task creates/modifies files in the working directory via scripts or commands (especially paths only determined at runtime, e.g. dated reports), append one line per artifact at the very end of your final answer, strictly formatted as: [[artifact:workspace-relative or absolute path|optional note]]. Example: [[artifact:report_2026-10-20.xlsx|bookmark stats report]]. List only files truly produced this task; never fabricate or declare files that were not generated; the note is optional. These markers are not shown to the user.`,memoryTitle:`## Memory`,memoryRules:`- Unified tool agent_memory, distinguished by action: store (add/update/delete) / recall (retrieve) / manage (review/cleanup)
8
+ - store: subAction=add requires type+content, update requires memoryId+type, **delete only requires memoryId (no type)**. **Always recall first to find the id before deleting**
9
+ - recall: use keywords for query (e.g. "exam"), not full sentences. Optional memoryType and limit
10
+ - manage: subAction=review to assess value, compact to clean up low-value entries
11
+ - Store long-term valuable information; add tags and importance (1-10) for easier retrieval
12
+ - importance semantics: 8-10 = relevant across most conversations (environment constraints / tech preferences / work habits), always injected into the system prompt; 5-7 = important but narrow-scope info (project details / config records), retrieved on demand; 1-4 = low value
13
+ - Never store raw credentials (passwords / auth codes / keys); store only a location pointer (e.g. "auth code lives in xxx/.env")`,importanceLabel:`Importance`,tagsLabel:`Tags`,permanentNotesTitle:`## Permanent Notes`,permanentNotesMore:`> There are {count} more historical memories (covering: {topics}, etc.). Before answering questions about the local environment, installed tools/skills, past projects, personal preferences, or prior records, retrieve them first via agent_memory (action=recall); when unsure, recall once more rather than skip.`,permanentNotesMoreNoTopics:`> There are {count} more historical memories. Before answering questions about the local environment, installed tools/skills, past projects, personal preferences, or prior records, retrieve them first via agent_memory (action=recall); when unsure, recall once more rather than skip.`,currentEnvTitle:`## Current Environment`,currentTimeLabel:`Current time: `,browserLabel:`Browser: Chrome Extension (Side Panel)`,defaultPromptIntro:`AI Helper: IT Technical Assistant.`,capabilityTitle:`## Capabilities`,capabilityDesc:`Programming & debugging (Java/Python/JavaScript/Go/C++), architecture optimization, performance tuning, code review, documentation, browser tool calls`,taskPlanningJoin:`, task planning`,requirementTitle:`## Requirements`,requirementDesc:`Precise technical terminology, runnable code examples, Markdown format, actionable solutions, no security-violating code`,envTitle:`## Environment`}});function c(e,t=`info`,n=3e3){let r=document.getElementById(`toastContainer`);if(!r)return;let i=document.createElement(`div`);i.className=`toast ${t}`,i.textContent=e,r.appendChild(i),requestAnimationFrame(()=>{i.classList.add(`toast-show`)}),setTimeout(()=>{i.classList.remove(`toast-show`),setTimeout(()=>{i.parentNode&&i.parentNode.removeChild(i)},300)},n)}function l(){let e=document.getElementById(`userInput`);if(!e||o.isScrolling)return;e.style.height=`auto`;let t=e.scrollHeight;t<=50?e.style.height=``:e.style.height=Math.min(t,100)+`px`,u()}function u(){let e=document.querySelector(`.input-wrapper`),t=document.querySelector(`.input-container`);if(!e||!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect().bottom-n.top+8;t.style.setProperty(`--dropdown-bottom`,r+`px`)}function d(e){if(!e)return``;let t=document.createElement(`div`);return t.textContent=e,t.innerHTML}function f(e){return e?String(e).replace(/&/g,`&amp;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`):``}function p(e){return!e||e<0?`0ms`:e<1e3?`${Math.round(e)}ms`:e<6e4?`${m(e/1e3)}s`:e<36e5?`${m(e/6e4)}min`:`${m(e/36e5)}h`}function m(e){let t=Math.round(e*10)/10;return Number.isInteger(t)?String(t):t.toFixed(1)}function h(e){return String(e).padStart(2,`0`)}function g(e){if(!e)return``;let t=new Date(e);if(isNaN(t.getTime()))return``;let n=`${h(t.getHours())}:${h(t.getMinutes())}`,i=new Date,a=r()!==`en`;return t.getFullYear()===i.getFullYear()&&t.getMonth()===i.getMonth()&&t.getDate()===i.getDate()?n:a?t.getFullYear()===i.getFullYear()?`${t.getMonth()+1}月${t.getDate()}日 ${n}`:`${t.getFullYear()}/${t.getMonth()+1}/${t.getDate()} ${n}`:t.getFullYear()===i.getFullYear()?`${t.toLocaleString(`en-US`,{month:`short`})} ${t.getDate()}, ${n}`:`${t.getFullYear()}/${h(t.getMonth()+1)}/${h(t.getDate())}, ${n}`}function _(e){if(!e)return``;let t=new Date(e);if(isNaN(t.getTime()))return``;let n=`${h(t.getHours())}:${h(t.getMinutes())}:${h(t.getSeconds())}`;return r()===`en`?`${t.getFullYear()}-${h(t.getMonth()+1)}-${h(t.getDate())} ${n}`:`${t.getFullYear()}年${t.getMonth()+1}月${t.getDate()}日 ${n}`}function v(e){return!e||e<=0?`0`:e<1e3?String(e):e<1e4?Math.round(e/100)/10+`K`:e<1e6?Math.round(e/1e3)+`K`:Math.round(e/1e5)/10+`M`}function y(e){return!e&&e!==0?`0`:Number(e).toLocaleString(`en-US`)}function b(e){if(!e||!Array.isArray(e))return null;let t=0,n=0,r=0,i=!1;for(let a of e){let e=a.apiResponse?.tokenUsage;e&&(t+=e.prompt_tokens||0,n+=e.completion_tokens||0,r+=e.total_tokens||(e.prompt_tokens||0)+(e.completion_tokens||0),i=!0)}return i?{promptTokens:t,completionTokens:n,totalTokens:r}:null}e(`zh`,{tokenPopup:{title:`Token 消耗明细`,total:`总计`,input:`输入`,output:`输出`,inputUnit:`tokens`,outputUnit:`tokens`,percent:`{p}%`,balanceTitle:`账户余额`,balanceTotal:`总余额`,balanceGranted:`赠送余额`,balanceToppedUp:`充值余额`,balanceLoading:`查询中...`}}),e(`en`,{tokenPopup:{title:`Token Usage Details`,total:`Total`,input:`Input`,output:`Output`,inputUnit:`tokens`,outputUnit:`tokens`,percent:`{p}%`,balanceTitle:`Account Balance`,balanceTotal:`Total Balance`,balanceGranted:`Granted`,balanceToppedUp:`Topped Up`,balanceLoading:`Loading...`}});function x(e,n){if(!e)return;let r=document.querySelector(`.token-detail-popup`);if(r&&(r.remove(),n._tokenPopupOpen)){n._tokenPopupOpen=!1;return}document.querySelectorAll(`[data-token-popup-open]`).forEach(e=>{e._tokenPopupOpen=!1,e.removeAttribute(`data-token-popup-open`)});let{promptTokens:i,completionTokens:a,totalTokens:o}=e,s=o>0?Math.round(i/o*100):0,c=o>0?Math.round(a/o*100):0,l=document.createElement(`div`);l.className=`token-detail-popup`,l.innerHTML=`
14
+ <div class="token-popup-header">
15
+ <span class="token-popup-title">${t(`tokenPopup.title`)}</span>
16
+ <button class="token-popup-close" aria-label="${t(`common.close`)}">×</button>
17
+ </div>
18
+ <div class="token-popup-body">
19
+ <div class="token-popup-row token-popup-total">
20
+ <span class="token-popup-label">${t(`tokenPopup.total`)}</span>
21
+ <span class="token-popup-value">${y(o)}</span>
22
+ </div>
23
+ <div class="token-popup-divider"></div>
24
+ <div class="token-popup-row">
25
+ <span class="token-popup-label">${t(`tokenPopup.input`)}</span>
26
+ <div class="token-popup-right">
27
+ <span class="token-popup-value">${y(i)}</span>
28
+ <span class="token-popup-percent">${s}%</span>
29
+ </div>
30
+ </div>
31
+ <div class="token-popup-row">
32
+ <span class="token-popup-label">${t(`tokenPopup.output`)}</span>
33
+ <div class="token-popup-right">
34
+ <span class="token-popup-value">${y(a)}</span>
35
+ <span class="token-popup-percent">${c}%</span>
36
+ </div>
37
+ </div>
38
+ <div class="token-popup-balance-section" style="display:none;">
39
+ <div class="token-popup-divider"></div>
40
+ <div class="token-popup-balance-header">
41
+ <span class="token-popup-balance-title">${t(`tokenPopup.balanceTitle`)}</span>
42
+ </div>
43
+ <div class="token-popup-balance-content">
44
+ <span class="token-popup-balance-loading">${t(`tokenPopup.balanceLoading`)}</span>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ `,document.body.appendChild(l);let u=n.getBoundingClientRect(),d=l.getBoundingClientRect(),f=window.innerHeight,p,m;p=u.top-d.height-8>0?u.top-d.height-8:u.bottom+8,m=u.left+u.width/2-d.width/2,m=Math.max(8,Math.min(m,window.innerWidth-d.width-8)),p+d.height>f-8&&(p=f-d.height-8),l.style.top=p+`px`,l.style.left=m+`px`,n._tokenPopupOpen=!0,n.setAttribute(`data-token-popup-open`,``),l.querySelector(`.token-popup-close`).addEventListener(`click`,e=>{e.stopPropagation(),l.remove(),n._tokenPopupOpen=!1,n.removeAttribute(`data-token-popup-open`)});let h=e=>{!l.contains(e.target)&&!n.contains(e.target)&&(l.remove(),n._tokenPopupOpen=!1,n.removeAttribute(`data-token-popup-open`),document.removeEventListener(`click`,h,!0))};setTimeout(()=>{document.addEventListener(`click`,h,!0)},0),S(l)}async function S(e){let n=e.querySelector(`.token-popup-balance-section`);if(!n)return;let r=()=>{n.style.display=`none`};try{let e=await chrome.storage.local.get([`apiBase`,`apiKey`,`modelName`]),i=(e.modelName||``).toLowerCase(),o=(e.apiBase||`https://api.deepseek.com`).replace(/\/+$/,``);if(!i.includes(`deepseek`)||!o.includes(`deepseek.com`))return;let s=a(e.apiKey);if(!s)return;n.style.display=``;let c=await fetch(`${o}/user/balance`,{method:`GET`,headers:{Authorization:`Bearer ${s}`}});if(!c.ok)throw Error(`HTTP ${c.status}`);let l=await c.json();if(!l.is_available||!l.balance_infos?.length){r();return}let u=l.balance_infos[0],d=u.currency||`CNY`,f=n.querySelector(`.token-popup-balance-content`);f.innerHTML=`
49
+ <div class="token-popup-row token-popup-total">
50
+ <span class="token-popup-label">${t(`tokenPopup.balanceTotal`)}</span>
51
+ <span class="token-popup-value token-popup-balance-value">${u.total_balance} ${d}</span>
52
+ </div>
53
+ <div class="token-popup-row">
54
+ <span class="token-popup-label">${t(`tokenPopup.balanceToppedUp`)}</span>
55
+ <span class="token-popup-value token-popup-balance-sub">${u.topped_up_balance} ${d}</span>
56
+ </div>
57
+ <div class="token-popup-row">
58
+ <span class="token-popup-label">${t(`tokenPopup.balanceGranted`)}</span>
59
+ <span class="token-popup-value token-popup-balance-sub">${u.granted_balance} ${d}</span>
60
+ </div>
61
+ `}catch(e){console.warn(`[TokenPopup] Failed to fetch DeepSeek balance:`,e),r()}}function C(e,r){navigator.clipboard.writeText(e).then(()=>{let e=r.innerHTML;r.innerHTML=`<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
62
+ <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0z"/>
63
+ </svg>`,r.classList.add(`copied`),setTimeout(()=>{r.innerHTML=e,r.classList.remove(`copied`)},2e3)}).catch(i=>{n.error(`[SidePanel] copy failed:`,i);let a=document.createElement(`textarea`);a.value=e,a.style.position=`fixed`,a.style.left=`-999999px`,document.body.appendChild(a),a.select();try{document.execCommand(`copy`);let e=r.innerHTML;r.innerHTML=`<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
64
+ <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.75.75 0 0 1 1.06-1.06L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0z"/>
65
+ </svg>`,r.classList.add(`copied`),setTimeout(()=>{r.innerHTML=e,r.classList.remove(`copied`)},2e3)}catch{c(t(`common.copyFailed`),`error`)}document.body.removeChild(a)})}function w(){if(typeof navigator<`u`&&navigator.userAgent){let e=navigator.userAgent;if(e.includes(`Windows`))return`Windows`;if(e.includes(`Mac OS`)||e.includes(`Macintosh`))return`macOS`;if(e.includes(`Linux`)&&!e.includes(`Android`))return`Linux`}return`Unknown`}function T(e=null){if(!o.agentPlatform||!o.agentPlatform.connected||!(o.enabledTools&&o.enabledTools.includes(`agent_exec`))||e!=null&&Array.isArray(e)&&!e.includes(`agent_exec`))return null;let n=o.agentPlatform,r=`unknown`,i=n.shell||`/bin/sh`,a=``;return n.platformName&&(n.platformName.toLowerCase().includes(`windows`)?(r=`Windows`,i.toLowerCase().includes(`powershell`)?(i=`PowerShell`,a=t(`util.cmdHintPowerShell`)):i.toLowerCase().includes(`cmd`)||i.toLowerCase().includes(`command`)?(i=`CMD`,a=t(`util.cmdHintCmd`)):i.toLowerCase().includes(`bash`)||n.platformName.toLowerCase().includes(`git`)?(i=`Git Bash`,a=t(`util.cmdHintGitBash`)):(i=`PowerShell`,a=t(`util.cmdHintPowerShellShort`))):n.platformName.toLowerCase().includes(`mac`)||n.platformName.toLowerCase().includes(`darwin`)?(r=`macOS`,i=i.toLowerCase().includes(`zsh`)?`zsh`:i.toLowerCase().includes(`bash`)?`bash`:`zsh`,a=t(`util.cmdHintUnix`)):n.platformName.toLowerCase().includes(`linux`)&&(r=`Linux`,i=i.toLowerCase().includes(`bash`)?`bash`:i.toLowerCase().includes(`zsh`)?`zsh`:i.toLowerCase().includes(`fish`)?`fish`:`bash`,a=t(`util.cmdHintUnix`))),{osType:r,shellType:i,platformName:n.platformName,arch:n.arch,workdir:n.workdir||``,commandHint:a}}function E(e,t){return t==null?!0:Array.isArray(t)&&t.includes(e)}async function D(e=null){let n=new Date().toLocaleString(`zh-CN`),i=w(),a=T(e?.toolIds),c=``;a&&(c=`
66
+
67
+ ${t(`util.cmdExecEnvTitle`)}
68
+ - ${t(`util.cmdExecOsShell`)}: ${a.osType} (${a.arch}) / ${a.shellType}
69
+ - ${t(`util.cmdExecWorkdir`)}: ${a.workdir||t(`util.cmdExecWorkdirUnset`)}
70
+ - ${a.commandHint}`);let l=(await s()).filter(t=>t.allowSubDispatch&&t.id!==(e?.id||``)),u=l.length>0&&E(`dispatch_task`,e?.toolIds),d=!1,f=null;try{let e=await chrome.storage.local.get([`pairedAgents`,`activeAgentId`]),t=e.pairedAgents||[];if(d=t.length>0,d&&e.activeAgentId){let n=t.find(t=>t.id===e.activeAgentId);if(n?.url)try{f=new URL(n.url).hostname}catch{let e=n.url.replace(/^https?:\/\//,``).replace(/\/.*$/,``).split(`:`)[0];e&&(f=e)}}}catch{}let p=``;f&&(p=`\n${t(`util.agentHostLabel`)}${f}${t(`util.agentHostHint`)}`);let m=``,h=``,g=``;if(u){m=t(`util.assistantTerm`);let e=l.map(e=>`- **${e.id}** (${e.icon} ${e.name}): ${e.description||t(`util.noDesc`)}`).join(`
71
+ `);g=`
72
+
73
+ ${t(`util.subDispatchTitle`)}
74
+ ${t(`util.subDispatchDesc`)}
75
+
76
+ ${t(`util.subDispatchAvailable`)}
77
+ ${e}`}d&&(h=t(`util.agentTerm`));let _=``;if(m||h){let e=[m,h].filter(Boolean).join(`
78
+ `);_=`
79
+
80
+ ${t(`util.terminologyTitle`)}
81
+ ${e}`}let v=o.useTools&&E(`plan_task`,e?.toolIds)?`
82
+
83
+ ${t(`util.taskPlanningTitle`)}
84
+ ${t(`util.taskPlanningDesc`)}`:``,y=o.useTools&&o.agentPlatform?.connected?`
85
+
86
+ ${t(`util.artifactDeclTitle`)}
87
+ ${t(`util.artifactDeclDesc`)}`:``,b=[`agent_memory`].some(t=>E(t,e?.toolIds)),x=o.useTools&&b,S=o.useTools&&o.agentPlatform?.connected&&b?`
88
+
89
+ ${t(`util.memoryTitle`)}
90
+ ${t(`util.memoryRules`)}`:``,C=``;if(o.agentPlatform?.connected)try{let e=await k(),n=e.facts||[],i=e.remainingCount||0,a=n.length>0,o=i>0&&x;if(a||o){let s=`
91
+
92
+ ${t(`util.permanentNotesTitle`)}
93
+ `;if(a&&(s+=n.map((e,n)=>`${n+1}. [${t(`util.importanceLabel`)}: ${e.importance||5}] ${e.content}${e.tags&&e.tags.length?` (${t(`util.tagsLabel`)}: ${e.tags.join(`, `)})`:``}`).join(`
94
+ `)+`
95
+ `),o){let n=e.remainingTags||[],a=n.join(r()===`zh`?`、`:`, `);s+=`
96
+ `+(n.length>0?t(`util.permanentNotesMore`,{count:i,topics:a}):t(`util.permanentNotesMoreNoTopics`,{count:i}))+`
97
+ `}C=s}}catch{}let D;if(D=e&&e.systemPrompt&&e.systemPrompt.trim()?e.systemPrompt:o.systemPrompt&&o.systemPrompt.trim()?o.systemPrompt:null,D){let r=`${D}${_}${C}
98
+
99
+ ${t(`util.currentEnvTitle`)}
100
+ - ${t(`util.currentTimeLabel`)}${n}
101
+ - ${t(`util.browserLabel`)} / ${i}${p}${c}${v}${g}${S}${y}
102
+ `;try{let t=await O(e?.toolIds,e?.skillIds);t&&(r+=`\n${t}\n`)}catch{}return r}let A=`${t(`util.defaultPromptIntro`)}${_}${C}
103
+
104
+ ${t(`util.capabilityTitle`)}
105
+ ${t(`util.capabilityDesc`)}${o.useTools&&E(`plan_task`,e?.toolIds)?t(`util.taskPlanningJoin`):``}
106
+
107
+ ${t(`util.requirementTitle`)}
108
+ ${t(`util.requirementDesc`)}${v}${g}${S}${y}
109
+
110
+ ${t(`util.envTitle`)}
111
+ ${n} | Chrome Side Panel / ${i}${p}${c}
112
+ `;try{let t=await O(e?.toolIds,e?.skillIds);t&&(A+=`\n${t}\n`)}catch{}return A}async function O(e,t){return Array.isArray(t)&&t.length===0||!(t!=null&&Array.isArray(t)&&t.length>0)&&e!=null&&Array.isArray(e)&&!e.includes(`agent_skill`)?``:new Promise(e=>{try{chrome.storage.local.get([`skillsEnabled`],n=>{if(n.skillsEnabled===!1){e(``);return}let r={type:`GET_AGENT_SKILL_PROMPTS`};t!=null&&Array.isArray(t)&&t.length>0&&(r.skillNames=t),chrome.runtime.sendMessage(r,t=>{if(chrome.runtime.lastError){e(``);return}e(t?.prompts||``)})})}catch{e(``)}})}async function k(){return new Promise(e=>{let t={facts:[],remainingCount:0,remainingTags:[]};try{chrome.runtime.sendMessage({type:`GET_PERMANENT_NOTES`},n=>{if(chrome.runtime.lastError||!n?.success){e(t);return}e({facts:n.facts||[],remainingCount:n.remainingCount||0,remainingTags:n.remainingTags||[]})})}catch{e(t)}})}function A(){return Promise.resolve({temperature:parseFloat(o.temperature.toFixed(2)),top_p:parseFloat(o.topP.toFixed(2))})}function j(){return new Promise(e=>{chrome.runtime.sendMessage({type:`GET_CHAT_CONFIG`},t=>{t&&(o.chatConfig=t,n.debug(`[SidePanel] conversationconfiguration loaded:`,o.chatConfig)),e(t)})})}async function M(){return new Promise(e=>{chrome.runtime.sendMessage({type:`GET_CHAT_CONFIG`},t=>{t&&(o.chatConfig=t,n.debug(`[SidePanel] sync loadconversationconfiguration:`,o.chatConfig)),e()})})}async function N(){return new Promise(e=>{chrome.tabs.query({active:!0,currentWindow:!0},t=>{t&&t.length>0&&t[0].id?(o.currentTabId=t[0].id,n.debug(`[SidePanel] get current Tab ID:`,o.currentTabId,`URL:`,t[0].url),e(o.currentTabId)):(n.warn(`[SidePanel] did not getvalid Tab ID`),e(null))})})}function P(){return new Promise(e=>{chrome.storage.local.get([`reactMaxIterations`,`reactApiTimeout`,`reactLoopTimeout`,`reactToolTimeout`,`reactClarifyTimeout`],t=>{e({maxIterations:t.reactMaxIterations||30,apiTimeout:t.reactApiTimeout||6e4,loopTimeout:t.reactLoopTimeout||72e5,toolTimeout:t.reactToolTimeout||3e4,clarifyTimeout:i.clarifyTimeout})})})}function F(e){e&&(e.style.removeProperty(`--clamp-y`),requestAnimationFrame(()=>{let t=e.getBoundingClientRect();if(!t.height)return;let n=0;t.bottom>window.innerHeight-8&&(n=window.innerHeight-8-t.bottom),t.top+n<8&&(n=8-t.top),n&&e.style.setProperty(`--clamp-y`,`${Math.round(n)}px`)}))}function I(e){e&&e.style.removeProperty(`--clamp-y`)}var L=`.message.user, .message.assistant, .user-context-bubble`;function R(e){if(!e)return[];let t=Array.from(e.querySelectorAll(L));if(t.length===0)return[];let n=[],r=[];for(let e of t)e.classList.contains(`message`)&&e.classList.contains(`user`)?(n.push({start:r.length?r[0]:e,userElement:e,elements:[...r,e]}),r.length=0):n.length===0?r.push(e):n[n.length-1].elements.push(e);return n.length===0&&n.push({start:t[0],userElement:null,elements:t}),n}function z(e,t,n=10){for(let r=0;r<e.length;r++)if(e[r].start.getBoundingClientRect().bottom>t+n)return r;return-1}function B(e,t,n){if(e<=0)return null;let r=t;if(r===-1){if(n!==`prev`)return null;r=e}let i=n===`prev`?r-1:r+1;return i>=0&&i<e?i:null}function V(e,t=120){let n=String(e||``).replace(/\s+/g,` `).trim();return n?n.length>t?`${n.slice(0,t)}…`:n:``}function H(e){if(!e)return``;let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=e=>String(e).padStart(2,`0`),r=`${n(t.getHours())}:${n(t.getMinutes())}`,i=new Date;return t.toDateString()===i.toDateString()?r:`${t.getMonth()+1}-${t.getDate()} ${r}`}function U(e){let n=V(Array.from(e&&e.childNodes||[]).filter(e=>e.nodeType===G).map(e=>e.textContent).join(``));if(n)return n;let r=[];try{r=JSON.parse(e.dataset&&e.dataset.attachedFiles||`[]`)}catch{}let i=(Array.isArray(r)?r:[]).map(e=>e&&e.name).filter(Boolean);if(i.length)return V(i.length>1?`${i[0]} +${i.length-1}`:i[0]);let a=e.querySelectorAll?e.querySelectorAll(`.user-message-image`).length:0;return a?t(`chat.navQuestionImageCount`,{count:a}):t(`chat.navQuestionNoText`)}function W(e,t){let n=String(t||``).trim().toLowerCase(),r=e.map((e,t)=>({group:e,index:t}));return n?r.filter(({group:e})=>U(e.userElement||e.start).toLowerCase().includes(n)):r}var G=3;function K(e,n,r,i=``){let a=W(e,i),o=a.map(({group:e,index:t})=>{let r=e.userElement||e.start,i=U(r),a=r.dataset&&r.dataset.messageId||``,o=H(r.dataset&&r.dataset.timestamp),s=o?`${i} · ${o}`:i,c=t===n,l=`chat-nav-question-item${c?` current`:``}`,u=`<span class="idx">${t+1}</span>`,d=`<span class="chat-nav-question-text">${f(i)}</span>`,p=o?`<span class="chat-nav-question-time">${f(o)}</span>`:``;return`<button class="${l}" data-message-id="${f(a)}" data-group-index="${t}" aria-current="${c?`true`:`false`}" title="${f(s)}">${u}${d}${p}</button>`}).join(``),s=t(r?`chat.navUnpinLabel`:`chat.navPinLabel`),c=n>=0?n+1:e.length;return`${`<div class="chat-nav-question-header"><span>${t(`chat.navQuestionTitle`)}</span><button type="button" class="chat-nav-pin${r?` on`:``}" title="${f(s)}">${f(s)}</button><span class="count">${t(`chat.navPosition`,{current:c,total:e.length})}</span></div>`}${e.length>=6?`<div class="chat-nav-question-filter"><input type="search" class="chat-nav-question-search" data-role="nav-search" placeholder="${f(t(`chat.navSearchPlaceholder`))}" value="${f(i)}" aria-label="${f(t(`chat.navSearchPlaceholder`))}"></div>`:``}<div class="chat-nav-question-list">${(a.length===0?`<div class="chat-nav-question-empty">${f(t(`chat.navNoMatch`))}</div>`:``)||o}</div>`}export{c as C,B as S,u as T,P as _,C as a,I as b,d as c,_ as d,p as f,N as g,A as h,F as i,z as l,y as m,b as n,M as o,v as p,R as r,f as s,l as t,g as u,D as v,x as w,K as x,j as y};
@@ -0,0 +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.1`,tag:`v2.4.1`,commitId:`01484eb01652291a052bc74d0e3a730f15d297de`,publishedAt:`2026-10-21T15:00:23.634Z`};export{m as a,p as i,d as n,f as o,u as r,h as t};