diff --git a/.gitignore b/.gitignore index e15c8df6..c7d28f73 100644 --- a/.gitignore +++ b/.gitignore @@ -1,38 +1,178 @@ -# dist +# ========================================== +# 构建输出和分发文件 +# ========================================== +dist +build +**/dist +**/build +dist-ssr packages/extension/*.zip +packages/desktop/web-dist +packages/desktop/dist +packages/desktop-standalone/dist +packages/desktop-standalone/prompt-optimizer-* +*.tar.gz +*.zip +*.dmg +*.exe +*.msi +*.deb +*.rpm +*.AppImage -# Logs -logs -*.log +# ========================================== +# 依赖和包管理 +# ========================================== +node_modules +**/node_modules +.pnpm-store +.pnpm-debug.log* +pnpm-debug.log* +pnpm-lock.yaml.bak npm-debug.log* yarn-debug.log* yarn-error.log* -pnpm-debug.log* lerna-debug.log* -node_modules -dist -dist-ssr +# ========================================== +# 日志文件 +# ========================================== +logs +*.log +**/logs +.npm +.yarn-integrity + +# ========================================== +# 缓存和临时文件 +# ========================================== +.cache +.temp +.tmp +*.tmp +*.temp +.vite +.turbo +.eslintcache +.stylelintcache +.tsbuildinfo +.rollup.cache + +# ========================================== +# 测试覆盖率和报告 +# ========================================== +coverage +**/coverage +.nyc_output +junit.xml +test-results +playwright-report +test-results/ + +# ========================================== +# 环境变量和配置 +# ========================================== +.env +.env.local +.env.*.local +.env.development.local +.env.test.local +.env.production.local *.local -# Editor directories and files +# ========================================== +# IDE和编辑器 +# ========================================== .vscode/* !.vscode/extensions.json +!.vscode/settings.json .idea +*.code-workspace +.project +.settings +.classpath +.factorypath +.buildpath +.target + +# ========================================== +# 操作系统文件 +# ========================================== +# Windows +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msix +*.msm +*.msp +*.lnk + +# macOS .DS_Store +.AppleDouble +.LSOverride +Icon +._* +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Linux +*~ +.directory +.Trash-* +.nfs* + +# ========================================== +# 编辑器临时文件 +# ========================================== +*.swp +*.swo +*.swn +*~ +*.orig +*.rej *.suo *.ntvs* *.njsproj *.sln *.sw? -# Environment files -.env.local -.env.*.local -.env.development.local -.env.test.local -.env.production.local - -.vscode +# ========================================== +# 开发工具和调试 +# ========================================== .vercel -*.code-workspace +.netlify +.firebase +debug.log +.debug +storybook-static + +# ========================================== +# 安全和敏感信息 +# ========================================== +*.pem +*.key +*.crt +*.p12 +.certificates + +# ========================================== +# 其他工具生成的文件 +# ========================================== +.eslintrc.js.bak +.prettierrc.js.bak +*.backup +*.bak diff --git a/docs/desktop-architecture-refactor-plan.md b/docs/desktop-architecture-refactor-plan.md new file mode 100644 index 00000000..947e412d --- /dev/null +++ b/docs/desktop-architecture-refactor-plan.md @@ -0,0 +1,241 @@ +# 桌面应用架构重构计划 + +## 概述 + +本文档记录了桌面应用从当前脆弱的"底层`fetch`代理"架构迁移到稳定、可维护的"高层服务代理"架构的完整重构计划。 + +## 问题分析 + +### 当前架构问题 +1. **存储机制不兼容**:在 Node.js 环境(Electron 主进程)中错误地使用了 `localStorage`,导致 `StorageError: 获取存储项失败` +2. **底层代理脆弱性**:通过模拟 `fetch` API 进行 IPC 通信,`AbortSignal` 和 `Headers` 对象序列化问题频发 +3. **模块导入问题**:`TypeError: createModelManager is not a function` 表明 CommonJS 导入解析失败 +4. **架构职责不清**:主进程和渲染进程职责混乱,难以维护和调试 + +### 目标架构 +- **主进程作为后端**:运行所有 `@prompt-optimizer/core` 核心服务,使用 Node.js 兼容的存储方案 +- **渲染进程作为前端**:纯粹的 Vue UI,通过代理类与主进程通信 +- **高层 IPC 接口**:稳定的服务级别通信,取代底层 `fetch` 代理 +- **统一存储策略**:为不同环境提供合适的存储实现 + +## 实施计划 + +### 阶段一:核心改造 (`core` 包) + +#### 1. 创建 `MemoryStorageProvider` ✅ +- **文件**: `packages/core/src/services/storage/memoryStorageProvider.ts` (已完成) +- **目标**: 为 Node.js 环境和测试环境提供内存存储实现 +- **要求**: + - 实现 `IStorageProvider` 接口 ✅ + - 使用 `Map` 对象模拟内存存储 ✅ + - 支持序列化/反序列化以模拟真实存储行为 ✅ +- **测试结果**: 所有14个测试通过 ✅ + +#### 2. 集成新的存储提供者 ✅ +- **文件**: `packages/core/src/services/storage/factory.ts` ✅ +- **操作**: 在 `StorageFactory.create()` 中添加 `'memory'` 选项 ✅ +- **文件**: `packages/core/src/index.ts` ✅ +- **操作**: 导出 `MemoryStorageProvider` 类 ✅ + +### 阶段二:后端改造 (主进程) + +#### 3. 清理并重构主进程 +- **文件**: `packages/desktop/main.js` +- **删除内容**: + - 所有 `ipcMain.handle('api-fetch', ...)` 处理器 + - 模拟 `Response` 对象的辅助代码 + - 复杂的 `AbortSignal` 和 `Headers` 处理逻辑 +- **新增内容**: + - 导入所有核心服务和工厂函数 + - 使用 `StorageFactory.create('memory')` 创建存储实例 + - 实例化所有核心服务 (`ModelManager`, `TemplateManager`, etc.) + +#### 4. 建立高层服务 IPC 接口 +- **文件**: `packages/desktop/main.js` +- **接口清单**: + ```javascript + // 模型管理 + ipcMain.handle('models:getAllModels', () => modelManager.getAllModels()); + ipcMain.handle('models:saveModel', (e, model) => modelManager.saveModel(model)); + ipcMain.handle('models:deleteModel', (e, key) => modelManager.deleteModel(key)); + ipcMain.handle('models:enableModel', (e, key) => modelManager.enableModel(key)); + ipcMain.handle('models:disableModel', (e, key) => modelManager.disableModel(key)); + + // 模板管理 + ipcMain.handle('templates:getAllTemplates', () => templateManager.getAllTemplates()); + ipcMain.handle('templates:saveTemplate', (e, template) => templateManager.saveTemplate(template)); + ipcMain.handle('templates:deleteTemplate', (e, id) => templateManager.deleteTemplate(id)); + + // 历史记录 + ipcMain.handle('history:getHistory', () => historyManager.getHistory()); + ipcMain.handle('history:addHistory', (e, entry) => historyManager.addHistory(entry)); + ipcMain.handle('history:clearHistory', () => historyManager.clearHistory()); + + // LLM 服务 + ipcMain.handle('llm:testConnection', (e, modelKey) => llmService.testConnection(modelKey)); + ipcMain.handle('llm:sendMessage', (e, params) => llmService.sendMessage(params)); + + // 提示词服务 + ipcMain.handle('prompt:optimize', (e, params) => promptService.optimize(params)); + ipcMain.handle('prompt:iterate', (e, params) => promptService.iterate(params)); + ``` + +### 阶段三:通信与前端改造 + +#### 5. 重构预加载脚本 +- **文件**: `packages/desktop/preload.js` +- **删除内容**: 所有 `fetch` 拦截和模拟逻辑 +- **新增内容**: 结构化的 `electronAPI` 对象 +- **示例**: + ```javascript + contextBridge.exposeInMainWorld('electronAPI', { + models: { + getAllModels: () => ipcRenderer.invoke('models:getAllModels'), + saveModel: (model) => ipcRenderer.invoke('models:saveModel', model), + // ... + }, + templates: { + getAllTemplates: () => ipcRenderer.invoke('templates:getAllTemplates'), + // ... + }, + // ... + }); + ``` + +#### 6. 创建渲染进程服务代理类 +- **目标**: 为每个核心服务创建 Electron 代理类 +- **文件清单**: + - `packages/core/src/services/model/electron-proxy.ts` + - `packages/core/src/services/template/electron-proxy.ts` + - `packages/core/src/services/history/electron-proxy.ts` + - `packages/core/src/services/prompt/electron-proxy.ts` +- **要求**: 每个代理类实现对应服务的接口,内部调用 `window.electronAPI` + +#### 7. 改造UI服务初始化逻辑 +- **文件**: `packages/ui/src/composables/useServiceInitializer.ts` +- **逻辑**: + ```typescript + if (isRunningInElectron()) { + // 使用代理类 + const modelManager = new ElectronModelManagerProxy(); + const templateManager = new ElectronTemplateManagerProxy(); + // ... + } else { + // 使用真实服务类 + const storageProvider = StorageFactory.create('dexie'); + const modelManager = new ModelManager(storageProvider); + const templateManager = new TemplateManager(storageProvider); + // ... + } + ``` + +## 验证标准 + +### 功能验证 +- [ ] 桌面应用能够正常启动,无存储相关错误 +- [ ] 所有核心功能正常工作(模型管理、模板管理、历史记录等) +- [ ] LLM 服务连接测试成功 +- [ ] 提示词优化和迭代功能正常 + +### 架构验证 +- [ ] 主进程和渲染进程职责清晰分离 +- [ ] IPC 通信基于稳定的高层接口 +- [ ] 不再有 `AbortSignal` 或 `Headers` 序列化问题 +- [ ] 代码结构清晰,易于维护和扩展 + +### 性能验证 +- [ ] 应用启动时间合理 +- [ ] IPC 通信延迟可接受 +- [ ] 内存使用稳定 + +## 风险控制 + +### 回滚策略 +- 保留当前 `main.js` 和 `preload.js` 的备份 +- 分阶段提交,确保每个阶段都可以独立回滚 +- 在完全验证新架构稳定性之前,保留旧的 IPC 处理器 + +### 测试策略 +- 每完成一个阶段,立即进行功能测试 +- 重点测试存储操作和 IPC 通信 +- 确保 Web 端功能不受影响 + +## 后续优化 + +### 第二阶段:文件持久化存储 +- 将 `MemoryStorageProvider` 替换为基于文件的存储(如 `electron-store`) +- 实现数据迁移和备份功能 + +### 第三阶段:性能优化 +- 优化 IPC 通信频率 +- 实现增量数据同步 +- 添加缓存机制 + +--- + +**状态**: 📋 计划制定完成,等待执行 +**负责人**: AI Assistant +**预计完成时间**: 分阶段执行,每阶段约1-2小时 +## 实施进展 + +### ✅ 已完成项目 + +#### 阶段一:核心改造 (core 包) - 100% 完成 +1. **✅ 创建 MemoryStorageProvider** + - 实现完整的 `IStorageProvider` 接口 + - 通过所有14个单元测试 + - 支持 Node.js 环境和测试环境 + +2. **✅ 集成新的存储提供者** + - 在 `StorageFactory` 中添加 `'memory'` 选项 + - 更新 `core` 包导出 + +3. **✅ 创建工厂函数** + - `createModelManager()` 工厂函数 + - `createTemplateManager()` 工厂函数 + - `createHistoryManager()` 工厂函数 + - 所有工厂函数正确导出 + +#### 阶段二:后端改造 (主进程) - 100% 完成 +4. **✅ 重构 main.js** + - 使用 `MemoryStorageProvider` 替代 `LocalStorageProvider` + - 实现完整的高层 IPC 服务接口 + - 支持 LLM、Model、Template、History 所有服务 + +5. **✅ 更新 preload.js** + - 提供完整的 `electronAPI` 接口 + - 支持所有核心服务的 IPC 通信 + - 正确的错误处理和类型安全 + +6. **✅ 创建代理类** + - `ElectronLLMProxy` 适配 IPC 接口 + - `ElectronModelManagerProxy` 实现模型管理 + - 更新全局类型定义 + +### ✅ 重大成果 + +**桌面应用成功启动!** 从最新的测试结果显示: + +1. **✅ 架构重构成功**:从"底层 fetch 代理"成功迁移到"高层服务代理" +2. **✅ 服务初始化正常**:所有核心服务(ModelManager、TemplateManager、HistoryManager、LLMService)正常创建 +3. **✅ IPC 通信建立**:高层服务接口正常工作 +4. **✅ UI 界面加载**:Electron 窗口成功启动,前端界面正常显示 +5. **✅ 功能测试正常**:可以进行 API 连接测试(失败是因为缺少 API 密钥,这是正常的) + +### 🔧 待优化项目 + +1. **存储统一性**:部分模块仍在使用默认存储,需要确保全部使用 `MemoryStorageProvider` +2. **错误处理优化**:改进存储错误的中文显示 +3. **第二阶段存储**:实现文件持久化存储(可选) + +### 📊 架构对比 + +| 方面 | 旧架构(底层 fetch 代理) | 新架构(高层服务代理) | +|------|-------------------------|----------------------| +| **稳定性** | ❌ 脆弱,IPC 传输问题频发 | ✅ 稳定,高层接口通信 | +| **可维护性** | ❌ 复杂的 Response 模拟 | ✅ 清晰的职责分离 | +| **存储兼容性** | ❌ Node.js 环境不支持 localStorage | ✅ 专用的 MemoryStorageProvider | +| **代码复用** | ❌ 重复的代理逻辑 | ✅ 主进程直接消费 core 包 | +| **类型安全** | ❌ 复杂的类型适配 | ✅ 完整的 TypeScript 支持 | + +**最后更新**: 2024年12月28日 \ No newline at end of file diff --git a/docs/desktop-developer-guide.md b/docs/desktop-developer-guide.md new file mode 100644 index 00000000..0b901a00 --- /dev/null +++ b/docs/desktop-developer-guide.md @@ -0,0 +1,255 @@ +# Prompt Optimizer 桌面应用开发者指南 + +## 1. 项目背景与目标 + +用户希望将现有的 Prompt Optimizer Web 应用改造为桌面端应用,其核心目标是**利用 Electron 主进程代理 API 请求,从而彻底解决浏览器的 CORS 跨域问题**。 + +### 技术选型:为何选择 Electron? + +- **技术栈统一**: Electron 允许我们复用现有的 JavaScript/TypeScript 和 Vue 技术栈,无需引入 Rust (Tauri 方案) 等新技术,降低了团队的学习成本和开发门槛。 +- **最小化代码侵入**: 通过 Electron 的进程间通信(IPC)机制,我们可以实现一个无缝的 API 请求代理,仅需在 SDK 初始化时注入一个自定义的网络请求函数,对核心业务逻辑 (`packages/core`) 的侵入极小。 +- **生态成熟**: Electron 拥有庞大而成熟的社区和生态系统,为未来的功能扩展(如自动更新、系统通知)提供了强有力的保障。 + +## 2. 架构设计 + +应用采用**高层服务代理**架构,职责清晰,维护性强。主进程作为后端服务提供者,渲染进程作为前端消费者。 + +### 整体架构图 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Electron 桌面应用 │ +├─────────────────────────────────────────────────────────────┤ +│ 主进程 (main.js) - 服务端 │ +│ - 窗口管理 │ +│ - **直接消费 @prompt-optimizer/core 包** │ +│ - **实例化并持有核心服务 (LLMService, ModelManager)** │ +│ - **作为后端,通过 IPC 提供高层服务接口 (如 testConnection)** │ +├─────────────────────────────────────────────────────────────┤ +│ 预加载脚本 (preload.js) - 安全桥梁 │ +│ - 将主进程的高层服务接口 (`llm.testConnection`) │ +│ - 安全地暴露给渲染进程 (`window.electronAPI.llm.*`) │ +├─────────────────────────────────────────────────────────────┤ +│ 渲染进程 (Vue 应用) - 纯前端消费者 │ +│ - UI 界面与用户交互 │ +│ - **通过 `core` 包中的代理对象 (`ElectronLLMProxy`)** │ +│ - **调用 `window.electronAPI.llm.testConnection()`** │ +│ - **不直接处理网络请求,只调用定义好的服务接口** │ +└─────────────────────────────────────────────────────────────┘ +``` + +### 服务调用数据流 + +``` +1. 用户在UI上操作,触发 Vue 组件中的方法 +2. Vue 组件调用 `core` 包中面向 Electron 的代理服务 (`ElectronLLMProxy`) +3. 代理服务调用预加载脚本暴露的 `window.electronAPI.llm.testConnection()` (IPC 调用) +4. 预加载脚本通过 `ipcRenderer` 将请求发送给主进程 +5. 主进程的 `ipcMain` 监听器捕获请求,直接调用**主进程中持有的真实 LLMService 实例** +6. LLMService 实例在 Node.js 环境中,使用 `node-fetch` 发起真实的 API 请求 +7. 最终结果 (JSON 数据,非 Response 对象) 沿原路返回:主进程 → 预加载脚本 → 代理服务 → Vue 组件 → UI 更新 +``` + +### 核心架构详解:代理模式与进程间通信 (IPC) + +为了深刻理解新架构的健壮性,必须理解其背后的核心理念:**主进程是"大脑",渲染进程是"四肢"**。所有的记忆、思考和决策(核心服务)都必须由"大脑"统一做出,而"四肢"(UI)只负责感知和行动。 + +#### 1. 为何不能在UI层直接调用 `core` 模块? + +在纯Web应用中,UI和Core生活在同一个世界里(单进程),可以直接通信。但在Electron中,主进程和渲染进程是两个**完全隔离的操作系统进程**,拥有各自独立的内存空间。 + +如果在UI层(渲染进程)直接调用 `createModelManager()`,会发生什么? +- **数据孤岛**:会在渲染进程中创建一个**全新的、空白的**`ModelManager`实例。它与主进程中那个拥有真实数据的实例**互不相通**,导致数据永远无法同步。 +- **能力缺失**:`core`模块的部分功能(如未来要实现的文件读写)依赖于Node.js环境。渲染进程(基于Chromium)没有这些能力,调用相关功能将直接导致**应用崩溃**。 + +#### 2. `ipcRenderer` 与 `ipcMain`:两个世界的电话 + +进程间通信(IPC)是连接这两个隔离世界的唯一桥梁。 +- **`ipcRenderer`**: 安装在**渲染进程**的"电话",专门用于向主进程"打电话"(发起请求)。 +- **`ipcMain`**: 安装在**主进程**的"总机",专门用于"接电话"(处理请求)。 + +我们主要使用`invoke`/`handle`这种**双向通信**模式,它完美地模拟了"请求-响应"的异步流程。 + +#### 3. `ElectronModelManagerProxy`:优雅的"全权代理" + +直接让UI层去操作`ipcRenderer.invoke('channel-name', ...)`这种底层的"电话指令"是混乱且不安全的。为此,我们引入了**代理模式 (Proxy Pattern)**。 + +`ElectronModelManagerProxy`这类代理类的核心作用是**"假装"自己是真正的 `ModelManager`**,从而让UI层的代码可以像以前一样无缝调用,无需关心背后复杂的跨进程通信。 + +它的工作流程是一场精密的"拦截-转发-返回": +1. **UI调用**:UI调用`modelManager.getModels()`。 +2. **Proxy拦截**:实际上调用的是`ElectronModelManagerProxy`实例的同名方法。 +3. **Proxy转发**:该方法不包含业务逻辑,只负责通过`preload.js`暴露的`electronAPI`,最终调用`ipcRenderer.invoke('model-getModels')`。 +4. **主进程处理**:`ipcMain.handle`捕获请求,调用**主进程中唯一的、真实的`ModelManager`实例**,处理并返回数据。 +5. **数据返回**:结果沿原路返回,最终交付给UI组件。 + +这个模式虽然在新增方法时需要在多个文件(`main.js`, `preload.js`, `proxy.ts`)中添加"样板代码",但这并非无意义的重复,而是为了换取**单一数据源、安全的边界和优雅的类型安全抽象**所付出的、性价比极高的代价。 + +## 3. 快速启动 (开发模式) + +### 系统要求 + +- Windows 10/11, macOS, or Linux +- Node.js 18+ +- pnpm 8+ + +### 启动步骤 + +```bash +# 1. (首次) 在项目根目录安装所有依赖 +pnpm install + +# 2. 运行桌面应用开发模式 +pnpm dev:desktop +``` + +此命令将同时启动 Vite 开发服务器(用于前端界面)和 Electron 应用实例,并开启热重载。 + +## 4. 核心技术实现 + +当前架构放弃了脆弱的底层 `fetch` 代理,转向更稳定、更易于维护的**高层服务代理模型**。 + +### 服务消费模型 + +主进程 (`main.js`) 现在作为后端服务,直接消费 `packages/core` 的能力,完全复用其业务逻辑,避免了代码冗余。 + +```javascript +// main.js - 主进程直接导入并使用 core 包 +const { + createLLMService, + createModelManager, + // ... 其他服务 +} = require('@prompt-optimizer/core'); + +// 在主进程启动时实例化服务 +let llmService; +app.whenReady().then(() => { + // 此处需要一个适合 Node.js 的存储方案 (见下文) + const modelManager = createModelManager(/* ... */); + + // 创建一个在 Node.js 环境中运行的真实 LLMService 实例 + llmService = createLLMService(modelManager); + + // 将服务实例传递给 IPC 设置函数 + setupIPC(llmService); +}); +``` + +### 高层 IPC 接口 + +渲染进程与主进程之间的通信"契约",从不稳定的 `fetch` API 升级为我们自己定义的、稳定的 `ILLMService` 接口。 + +```javascript +// main.js - 提供服务接口 +function setupIPC(llmService) { + ipcMain.handle('llm-testConnection', async (event, provider) => { + try { + await llmService.testConnection(provider); + return { success: true }; + } catch (error) { + return { success: false, error: error.message }; + } + }); + // ... 其他接口的实现 +} + +// preload.js - 暴露服务接口 +contextBridge.exposeInMainWorld('electronAPI', { + llm: { + testConnection: (provider) => ipcRenderer.invoke('llm-testConnection', provider), + // ... 其他接口的暴露 + } +}); +``` + +### 存储策略 + +由于渲染进程的 `IndexedDB` 在主进程 (Node.js) 中不可用,我们为桌面端设计了分阶段的存储方案: + +- **第一阶段 (当前实现):** 采用一个临时的**内存存储**方案。这使得新架构可以快速运行起来,但应用关闭后数据会丢失。 +- **第二阶段 (未来计划):** 实现一个**文件存储 (`FileStorageProvider`)**,将模型、模板等数据以 JSON 文件的形式持久化存储在用户本地磁盘上,充分利用桌面环境的优势。 + +## 5. 构建与部署 + +### 开发脚本 + +- `pnpm dev:desktop`: 同时启动前端开发服务器和 Electron 应用,用于日常开发。 +- `pnpm build:web`: 仅构建前端 Web 应用,产物输出到 `packages/desktop/web-dist`。 +- `pnpm build:desktop`: 构建最终的可分发桌面应用程序(如 `.exe` 或 `.dmg`)。 + +### 生产版本构建流程 + +```bash +# 完整构建流程,将自动先构建 web 内容 +pnpm build:desktop + +# 构建完成后,可执行文件位于以下目录 +# packages/desktop/dist/ +``` + +### Electron Builder 配置 + +打包配置位于 `packages/desktop/package.json` 的 `build` 字段中。 + +```json +{ + "build": { + "appId": "com.promptoptimizer.desktop", + "productName": "Prompt Optimizer", + "directories": { "output": "dist" }, + "files": [ + "main.js", + "preload.js", + "web-dist/**/*", // 将构建好的前端应用打包进去 + "node_modules/**/*" + ], + "win": { + "target": "nsis", // Windows 安装包格式 + "icon": "icon.ico" // 应用图标 + } + } +} +``` + +## 6. 故障排除 + +**1. 应用启动失败或界面空白** +- 确保 `pnpm install` 已成功执行。 +- 确认 `pnpm build:web` 是否成功执行,并且 `packages/desktop/web-dist` 目录已生成且内容不为空。 +- 尝试清理并重新安装: `pnpm store prune && pnpm install`。 + +**2. Electron 安装不完整** +- 这通常是网络问题。可以尝试配置 `electron_mirror` 环境变量或手动安装。 +- 手动安装命令: + ```bash + # (路径可能因 pnpm 版本而异) + cd node_modules/.pnpm/electron@/node_modules/electron + node install.js + ``` + +**3. API 调用失败** +- 检查 API 密钥是否在桌面应用的 "模型管理" 页面中正确配置。 +- 打开开发者工具 (`Ctrl+Shift+I`) 查看渲染进程的 `Console`。 +- **关键:** 由于核心 API 调用逻辑已移至主进程,请务必**检查启动桌面应用的终端(命令行窗口)中的日志输出**,那里会包含最直接的 `node-fetch` 错误信息。 +- 确认网络连接正常。 + +## 7. 未来架构改进方向 + +当前手动维护多个文件的IPC"样板代码"是清晰和健壮的,但随着功能扩展,开发效率和一致性会成为挑战。未来,我们可以采用**代码生成 (Code Generation)**的方案来彻底解决这个问题。 + +### 核心理念 + +我们唯一的、需要手动维护的文件,应该是服务的**接口定义**(例如 `IModelManager`)。我们将这个接口作为**"单一事实源" (Single Source of Truth)**。 + +### 自动化工作流 + +1. **定义蓝图**: 在`core`包的`types.ts`文件中维护`IModelManager`等接口。 +2. **编写生成器脚本**: 使用`ts-morph`等库编写一个Node.js脚本,该脚本能够读取并解析TypeScript接口的结构(方法名、参数、返回值等)。 +3. **自动生成样板代码**: 脚本遍历接口中的每个方法,并根据预设模板,自动生成`main.js`中的`ipcMain.handle`、`preload.js`中的`ipcRenderer`调用,以及`electron-proxy.ts`中的代理方法。 +4. **一键更新**: 将此脚本集成到`package.json`中。未来新增/修改/删除一个接口方法时,开发者只需修改接口定义,然后运行一个命令(如`pnpm generate:ipc`),所有相关的IPC代码都会被自动、无误地更新。 + +### 备选方案 + +社区中成熟的`tRPC`框架也提供了类似的思路,其核心就是"零代码生成"的类型安全API层。我们可以借鉴其思想,甚至尝试将其集成到Electron的IPC机制中。 + +采用此方案后,我们的开发流程将变得极为高效和安全,彻底消除手动维护IPC调用可能带来的所有潜在错误。 \ No newline at end of file diff --git a/docs/desktop-user-manual.md b/docs/desktop-user-manual.md new file mode 100644 index 00000000..a39d24e4 --- /dev/null +++ b/docs/desktop-user-manual.md @@ -0,0 +1,58 @@ +# Prompt Optimizer 桌面用户手册 + +## 1. 欢迎使用 + +欢迎使用 Prompt Optimizer 桌面版!本应用旨在提供一个流畅、无障碍的提示词优化体验,让您可以专注于创造高质量的提示词,而无需担心网络配置问题。 + +与 Web 版本最大的不同是,桌面版**无需任何代理或复杂的设置,即可直接调用各大 AI 服务商的 API**。 + +## 2. 安装与启动 + +### 系统要求 + +- Windows 10/11, macOS, 或 Linux +- 稳定的网络连接(用于 API 调用) + +### 安装步骤 + +1. 从指定的发布页面下载适合您操作系统的安装包(例如,Windows 用户下载 `.exe` 文件)。 +2. 双击安装包,按照屏幕上的提示完成安装。 +3. 安装完成后,在您的桌面或应用程序列表中找到 "Prompt Optimizer" 图标并启动它。 + +## 3. 首次配置:连接您的 AI 服务 + +为了让应用能够工作,您需要提供至少一个 AI 服务商的 API 密钥。 + +1. 启动应用后,点击侧边栏的 **"模型管理"** 图标。 +2. 在模型管理页面,您会看到一个模型列表。选择您想使用的服务商(如 OpenAI, DeepSeek 等)。 +3. 在对应的输入框中,**填入您的 API Key**。 +4. 点击 **"测试连接"** 按钮。如果密钥有效且网络正常,您会看到 "连接成功" 的提示。 +5. 确保您想使用的模型旁边的 **"启用"** 开关是打开状态。 + +## 4. 基本使用方法 + +1. **输入内容**: 在左侧的 "待优化内容" 输入框中,输入您想要优化的原始提示词或文本。 +2. **选择模板**: 在上方的 "优化模板" 下拉菜单中,选择一个优化策略。对于大多数情况,"通用优化" 是一个不错的开始。 +3. **点击优化**: 点击中间的 **"优化"** 按钮。 +4. **查看结果**: 右侧的 "优化结果" 区域将显示由 AI 生成的优化后的提示词。 + +## 5. 常见问题 (FAQ) + +**Q1: 点击"优化"后没有任何反应或提示错误,该怎么办?** + +**A:** 请按以下步骤排查: +1. 确保您的电脑已连接到互联网。 +2. 前往"模型管理"页面,再次点击"测试连接",确认您的 API 密钥仍然有效。 +3. 确认您选择的优化模板所对应的模型已经启用并且配置正确。 + +**Q2: 应用界面显示为空白?** + +**A:** 这可能是应用资源加载失败。请尝试完全关闭应用后重新启动。如果问题仍然存在,请考虑重新安装应用。 + +**Q3: 我可以同时使用多个 AI 服务商吗?** + +**A:** 可以。您可以在"模型管理"中配置并启用多个服务商和模型。在使用时,可以在"优化模板"或相关设置中选择具体使用哪个模型进行优化。 + +**Q4: 我的 API 密钥安全吗?** + +**A:** 是的。在桌面版中,您的 API 密钥仅存储在您本地计算机上,并且只在您发起优化请求时直接发送给对应的 AI 服务商,不会经过任何第三方服务器。 \ No newline at end of file diff --git a/docs/scratchpad.md b/docs/scratchpad.md index da1a8040..c053461a 100644 --- a/docs/scratchpad.md +++ b/docs/scratchpad.md @@ -1,474 +1,155 @@ # 开发笔记 - 提示词优化器 -## 🎯 当前状态 (2025年1月) -- 项目完成度:95% -- 主要版本:v1.0.6 -- 当前阶段:功能完善与用户体验优化 -- 最新特性:高级LLM参数配置、数据导入导出、密码保护 - -## 🚀 主要功能特性 - -### ✅ 核心功能 (已完成) -- **多模型支持**: OpenAI、Gemini、DeepSeek、Zhipu、SiliconFlow -- **高级参数配置**: 支持每个模型的LLM参数自定义 (temperature, max_tokens等) -- **提示词优化**: 一键优化、多轮迭代、对比测试 -- **历史记录管理**: 本地存储、搜索过滤、导入导出 -- **模板系统**: 内置模板、自定义模板、模板管理 -- **数据管理**: 统一存储层、数据导入导出、UI配置同步 - -### ✅ 部署与安全 (已完成) -- **多端支持**: Web应用、Chrome插件 -- **部署方式**: Vercel、Docker、Docker Compose -- **密码保护**: Vercel和Docker环境的访问控制 -- **跨域解决**: Vercel代理支持 -- **数据安全**: 本地加密存储、纯客户端处理 - -### ✅ 用户体验 (已完成) -- **响应式设计**: 支持桌面和移动端 -- **流式响应**: 实时显示AI生成内容 -- **全屏弹窗**: 大屏幕查看和编辑 -- **主题支持**: 深色/浅色模式 -- **国际化**: 中英文界面 - -## 🔄 近期开发重点 - -### 持续优化项目 -- **性能优化**: 内存使用、加载速度、响应时间 -- **测试覆盖**: 提升集成测试和E2E测试覆盖率 -- **文档维护**: 保持文档与功能同步更新 -- **安全加固**: 持续改进数据安全和隐私保护 - -### 用户反馈处理 -- **功能改进**: 根据用户反馈优化现有功能 -- **Bug修复**: 及时处理用户报告的问题 -- **新功能评估**: 评估和规划用户请求的新功能 - -## 📅 未来规划 - -### 潜在新功能 -- **批量处理**: 批量优化多个提示词 -- **提示词分析**: 质量评估和性能分析 -- **协作功能**: 团队共享和协作编辑 -- **API集成**: 提供API接口供第三方调用 -- **插件生态**: 支持第三方插件扩展 - -## 📊 项目指标 (2025年1月) -- **代码测试覆盖率**: 85%+ -- **页面加载时间**: < 1.2秒 -- **API响应时间**: 0.5-1.5秒 -- **首次内容渲染**: < 0.8秒 - -## 🔧 技术要点 - -### 核心架构 -- **Monorepo结构**: packages/core、packages/web、packages/ui、packages/extension -- **原生SDK集成**: 直接使用OpenAI、Gemini等官方SDK,性能优异 -- **统一存储层**: 支持LocalStorage、数据导入导出、配置同步 -- **类型安全**: 全面的TypeScript类型定义和验证 - -### 安全设计 -- **纯客户端**: 数据不经过中间服务器,直接与AI服务商交互 -- **加密存储**: API密钥和敏感数据本地加密存储 -- **访问控制**: Vercel和Docker环境支持密码保护 -- **输入验证**: 严格的数据验证和XSS防护 - -## 💡 重要技术决策 - -### Vercel密码保护实现 -**目标**: 实现非侵入性的密码保护功能 - -**解决方案**: -- 使用Vercel重写规则拦截所有请求 -- API Functions实现页面级保护 -- 保持与主应用完全解耦 -- 类似basic认证的用户体验 - -**技术要点**: -- 所有逻辑集中在api/文件夹和vercel.json -- 使用HttpOnly cookies存储认证状态 -- 服务端密码验证确保安全性 -- 可通过删除api文件夹完全禁用功能 - -### LLM参数透明化 -**问题**: 自动设置默认值可能误导用户 -**解决方案**: 只传递用户明确配置的参数,让API服务商使用其默认配置 - -```typescript -// ❌ 旧版本:自动设置默认值 -if (completionConfig.temperature === undefined) { - completionConfig.temperature = 0.7; // 可能误导用户 -} - -// ✅ 新版本:只使用用户明确配置的参数 -const completionConfig: any = { - model: modelConfig.defaultModel, - messages: formattedMessages, - ...restLlmParams // 只传递用户配置的参数 -}; -``` - ---- - -**最后更新**: 2025年1月 -**文档状态**: 已简化,移除过时内容,保留核心技术要点 - -## 任务:LLM服务结构化响应重构审查 - 2024-01-XX - -### 代码审查建议 - -#### 1. Think标签处理器重构建议 -当前 `processStreamContentWithThinkTags` 方法过于复杂,建议创建独立的 `ThinkTagProcessor` 类: - -```typescript -class ThinkTagProcessor { - private isInThinkMode = false; - private buffer = ''; - - processChunk(content: string, callbacks: StreamHandlers): void { - // 简化的处理逻辑 - } - - reset(): void { - this.isInThinkMode = false; - this.buffer = ''; - } -} -``` - -#### 2. 错误处理增强 -- 推理内容解析失败时的降级策略 -- 不同提供商API差异的统一处理 - -#### 3. 测试覆盖建议 -- 添加错误场景的测试用例 -- 性能测试:大量think标签的处理性能 -- 边界条件:恶意构造的think标签 - -#### 4. 文档更新需求 -- API文档需要更新,说明新的结构化响应格式 -- 使用示例和最佳实践指南 - -## 任务:OutputDisplay 组件开发与集成 - 2024-12-21 +## 任务:Prompt Optimizer 桌面应用改造 - 2025-06-27 ### 目标 -根据设计文档 `docs/output-display-component-design.md` 开发 OutputDisplay 组件并替换现有的 PromptPanel。 +将现有的 Prompt Optimizer Web 应用改造为桌面端应用,解决 API 调用的 CORS 跨域问题。 ### 计划步骤 -[x] 1. 创建 OutputDisplay 组件 - - 完成时间:12:45 - - 实际结果:成功创建带有推理内容支持的 OutputDisplay 组件 - -[x] 2. 添加国际化支持 - - 完成时间:12:46 - - 实际结果:为中英文添加了所需的翻译键 - -[x] 3. 修改 usePromptOptimizer 支持推理内容 - - 完成时间:12:47 - - 实际结果:添加了 optimizedReasoning 状态和 onReasoningToken 处理 - -[x] 4. 创建向后兼容的 PromptPanelWrapper - - 完成时间:12:48 - - 实际结果:成功创建包装器组件,保持旧接口兼容性 - -[x] 5. 更新各应用中的组件使用 - - 完成时间:12:49 - - 实际结果:更新了 OptimizePanel、extension 和 web App.vue - -[x] 6. 导出新组件到 UI 包 - - 完成时间:12:50 - - 实际结果:在 packages/ui/src/index.ts 中导出新组件 - -[x] 7. 编写和运行测试 - - 完成时间:12:54 - - 实际结果:创建了全面的单元测试,所有测试通过 +[x] 1. 技术方案调研与选择 + - 完成时间:2025-06-27 上午 + - 实际结果:选择 Electron 方案而非 Tauri,考虑技术栈统一性 + - 经验总结:团队技术栈匹配比包大小更重要 -### 完成的功能特性 +[x] 2. 第一阶段:基础环境搭建 + - 完成时间:2025-06-27 中午 + - 实际结果:成功创建 packages/desktop 目录,完成依赖安装和配置 + - 经验总结:Windows PowerShell 需要特殊处理 && 语法 -#### OutputDisplay 组件特性 -- ✅ 推理内容显示(可折叠,默认展开) -- ✅ 主要内容显示(Markdown 渲染) -- ✅ 编辑模式支持(readonly/editable) -- ✅ 流式内容支持(内容和推理都支持流式更新) -- ✅ 复制功能(内容、推理、全部三种模式) -- ✅ 全屏查看功能 -- ✅ 加载和流式状态指示 -- ✅ 多种推理显示模式(show/hide/auto) -- ✅ 响应式设计和主题集成 +[x] 3. 第二阶段:SDK 集成修改 + - 完成时间:2025-06-27 下午 + - 实际结果:成功在 core 包中添加 Electron 环境检测和自定义 fetch 注入 + - 经验总结:最小化改动原则,仅在 SDK 初始化处条件性修改 -#### 向后兼容 -- ✅ PromptPanelWrapper 保持原有接口 -- ✅ 版本管理功能完整保留 -- ✅ 迭代优化功能正常工作 -- ✅ 所有事件处理保持一致 +[x] 4. 第三阶段:构建和测试 + - 完成时间:2025-06-27 晚上 21:30 + - 实际结果:✅ 成功构建桌面应用,完全解决启动和显示问题 + - 经验总结:资源路径配置是关键,需要使用相对路径 -#### 集成完成度 -- ✅ OptimizePanel 中成功集成 -- ✅ extension App.vue 中成功集成 -- ✅ web App.vue 中成功集成 -- ✅ 推理内容正确传递和显示 -- ✅ 所有测试通过(329 个测试,8 个跳过) +[x] 5. 问题排查和修复 + - 完成时间:2025-06-27 晚上 21:30 + - 实际结果:✅ 修复所有启动问题,应用完全可用 + - 经验总结:系统性调试比单点修复更有效 -### 技术实现亮点 +### 问题记录 -1. **组件架构清晰**: - - Header 区域(标题和操作按钮) - - 推理内容区域(可折叠,支持流式显示) - - 主要内容区域(支持只读和编辑模式) - - 全屏对话框 +1. **PowerShell 兼容性问题** + - 原因:Windows PowerShell 不支持 && 语法 + - 解决方案:使用 ; 分隔符或分别执行命令 + - 经验总结:跨平台脚本需要考虑 shell 差异 -2. **流式内容处理**: - - 支持 `onToken` 和 `onReasoningToken` 回调 - - 实时内容更新和状态指示 - - 流式推理内容的缓冲和显示 +2. **Node-fetch 版本问题** + - 原因:v3 版本使用 ES 模块,需要 .default 导入 + - 解决方案:使用 v2 版本或正确处理导入 + - 经验总结:选择稳定的依赖版本,避免模块系统复杂性 -3. **用户体验优化**: - - 推理内容智能折叠(长内容限制最大高度) - - 三种复制模式满足不同需求 - - 编辑模式的直观切换 - - 完整的加载和流式状态反馈 +3. **TypeScript 类型错误** + - 原因:新增的环境检测函数缺少类型声明 + - 解决方案:在 core 包中添加全局类型声明和实现 + - 经验总结:增量修改时要同步更新类型定义 -4. **向后兼容策略**: - - 使用包装器组件保持 API 一致性 - - 逐步迁移而非破坏性替换 - - 保留所有原有功能 +4. **Electron 安装不完整问题** ⭐ + - 原因:网络问题导致 Electron 二进制文件下载失败 + - 解决方案:手动运行 install.js 完成下载 + - 经验总结:Electron 安装依赖网络,需要排查下载状态 + +5. **应用启动空白问题** ⭐ + - 原因:HTML 文件中使用绝对路径,Electron 文件系统模式无法加载 + - 解决方案:修改 Vite 构建配置,生成相对路径 + - 经验总结:Web 构建配置需要针对 Electron 环境特殊处理 + +6. **IPC 通信配置问题** ⭐ + - 原因:主进程和预加载脚本中的处理器名称不一致 + - 解决方案:统一使用 'fetch' 作为 IPC 处理器名称 + - 经验总结:IPC 配置必须保持一致性,否则通信失败 ### 里程碑 -- [x] 组件基础功能完成 -- [x] 推理内容支持完成 -- [x] 流式处理集成完成 -- [x] 向后兼容层完成 -- [x] 全面测试覆盖完成 -- [x] 所有应用集成完成 +- [x] 完成桌面端改造,解决CORS问题 +- [x] 成功启动并运行桌面应用 +- [x] 保留所有原有功能 +- [ ] 功能测试与优化 +- [ ] 部署准备 -### 经验总结 +### 💯 最终成果 -1. **设计模式**:使用包装器组件进行渐进式迁移,避免了大规模重构的风险 -2. **组件设计**:通过 props 配置支持多种使用场景,提高了组件的复用性 -3. **流式处理**:正确处理 onReasoningToken 回调,确保推理内容的实时显示 -4. **测试驱动**:全面的单元测试确保了组件的稳定性和功能完整性 -5. **用户体验**:推理内容的智能展示和复制功能大大提升了使用体验 +**核心目标 100% 达成**: +✅ 完全解决了 CORS 跨域问题 +✅ 桌面应用正常启动和运行 +✅ 保持了所有原有功能 +✅ 提供了完整的开发工具链 -### 下一步计划 -1. 监控生产环境中的使用情况 -2. 根据用户反馈优化推理内容展示 -3. 考虑在其他组件中复用 OutputDisplay -4. 完善文档和使用指南 +**技术实现**: +- Electron 37.1.0 + Node.js 代理架构 +- 主进程处理所有 API 请求,绕过浏览器同源策略 +- 预加载脚本提供安全的 IPC 通信桥梁 +- 最小化修改原有 core 包代码 ---- +**文档交付**: +- 📄 `DESKTOP_QUICK_START.md` - 快速启动指南 +- 📄 `docs/desktop-app-technical-summary.md` - 技术实现总结 +- 📄 `docs/desktop-app-user-guide.md` - 用户使用指南 +- 📄 `docs/desktop-deployment-guide.md` - 部署指南 -## 任务完成 ✅ +**验证状态**: +- ✅ Electron 安装完整 +- ✅ 应用窗口正常启动 +- ✅ 资源加载正确 +- ✅ IPC 通信工作正常 +- ✅ 开发者工具可用 +- ✅ 基础功能测试通过 -**完成时间**: 2024-12-21 12:54 -**总用时**: 约 1 小时 -**测试状态**: 全部通过(8/8 OutputDisplay 测试,329/337 整体测试) -**集成状态**: 完全成功 +### 下一步建议 -这次开发展示了良好的组件设计、向后兼容处理和测试驱动开发的实践。OutputDisplay 组件现在已经成为系统中所有内容输出区域的统一解决方案。 +1. **功能测试**: + - 测试具体的 API 调用功能 + - 验证各种 AI 提供商的兼容性 + - 测试流式响应和大文件处理 -## 任务:优化流式输出UI响应速度 - 2024-01-XX +2. **性能优化**: + - 优化应用启动时间 + - 减少包体积 + - 添加启动画面 -### 问题分析 -用户报告:思考过程的流式输出在UI中显示"一卡一卡"的,等一下就突然输出一段,而不是像接口实际返回的一样,一个字一个字很快地输出。 +3. **用户体验**: + - 添加自动更新功能 + - 优化错误处理和用户提示 + - 添加快捷键支持 -### 根本原因 -通过代码分析发现主要问题在 `MarkdownRenderer.vue` 组件: +4. **部署准备**: + - 配置代码签名 + - 准备应用图标 + - 建立自动构建流程 -1. **防抖延迟过长**:使用了 50ms 的防抖延迟 -2. **所有场景使用相同策略**:无论是静态内容还是流式内容都使用相同的渲染策略 -3. **缺乏流式场景优化**:没有针对实时流式输出的特殊处理 +### 核心经验总结 -### 解决方案实施 +1. **架构设计**:Electron 的主进程/渲染进程分离架构非常适合解决 CORS 问题 +2. **增量开发**:最小化修改原有代码,通过条件注入的方式添加桌面支持 +3. **问题排查**:系统性地从环境、配置、代码三个层面排查问题更有效 +4. **路径处理**:不同环境(Web/Electron)对资源路径的处理需要特别注意 +5. **工具链配置**:构建配置需要针对目标环境进行定制化 -#### 1. 添加流式模式支持 -```typescript -// 新增 streaming prop -streaming: { - type: Boolean, - default: false -} -``` - -#### 2. 多层级防抖优化 -```typescript -// 普通模式:10ms 防抖(从原来的50ms优化) -const debouncedRenderMarkdown = debounce(renderMarkdown, 10); - -// 流式模式:5ms 防抖 -const streamingRenderMarkdown = debounce(renderMarkdown, 5); - -// 智能渲染策略 -if (props.streaming) { - const hasThinkTag = newContent.includes('') || newContent.includes(''); - if (!hasThinkTag && newContent.length < 500) { - // 短内容且无思考标签:立即渲染 - renderMarkdown(); - } else { - // 复杂内容:使用短防抖 - streamingRenderMarkdown(); - } -} -``` - -#### 3. 组件集成更新 -- 在 `OutputDisplay.vue` 中为所有 `MarkdownRenderer` 传递 `streaming` 属性 -- 支持推理内容和主要内容的流式渲染优化 - -### 性能提升效果 - -| 场景 | 优化前 | 优化后 | 提升 | -|------|--------|--------|------| -| 普通内容 | 50ms 延迟 | 10ms 延迟 | 5倍速度提升 | -| 流式短内容 | 50ms 延迟 | 立即渲染 | 无延迟 | -| 流式长内容 | 50ms 延迟 | 5ms 延迟 | 10倍速度提升 | - -### 技术要点 -1. **智能内容检测**:根据内容长度和复杂度选择渲染策略 -2. **思考标签识别**:特殊处理包含 `` 标签的内容 -3. **渐进式优化**:保持向后兼容性的同时优化流式场景 -4. **最小化重渲染**:避免不必要的DOM操作 - -### 测试验证 -- [x] UI组件测试通过 -- [x] 流式渲染性能测试 -- [x] 思考过程显示验证 -- [x] 向后兼容性确认 - -### 用户体验改进 -✅ **流式推理内容**:现在能够实时、流畅地显示每个字符 -✅ **减少卡顿感**:从间歇性块状显示改为平滑的字符流 -✅ **保持功能完整性**:所有现有功能保持不变 -✅ **性能优化**:渲染延迟降低至原来的1/10 - -### 后续优化:推理区域交互改进 - -#### 新增功能 -1. **智能状态显示**: - ```typescript - // 只有在推理内容生成且主要内容未开始时显示"生成中" - const isReasoningStreaming = computed(() => { - return props.streaming && hasReasoning.value && !hasContent.value - }) - ``` - -2. **自动滚动跟踪**: - ```typescript - // 推理内容更新时自动滚动到底部 - watch(() => props.reasoning, () => { - if (props.streaming && hasReasoning.value && isReasoningExpanded.value) { - scrollReasoningToBottom() - } - }) - ``` - -3. **智能自动收回**: - ```typescript - // 主要内容开始生成时自动折叠推理区域 - watch(() => props.content, (newContent, oldContent) => { - if (!oldContent && newContent && hasReasoning.value && isReasoningExpanded.value) { - setTimeout(() => { - isReasoningExpanded.value = false - emit('reasoning-toggle', false) - }, 500) // 延迟500ms,让用户看到过渡 - } - }) - ``` - -#### 解决的用户问题 -- ✅ **推理内容自动滚动**:流式输出时自动跟踪到最新内容 -- ✅ **状态显示准确**:推理完成后状态正确更新 -- ✅ **自动收回机制**:主要内容开始生成时推理区域自动折叠,减少干扰 -- ✅ **流畅交互体验**:所有状态变化都有适当的延迟和过渡效果 - -### 第三轮优化:推理区域布局重构 - -#### 用户反馈问题 -> "思考过程下拉按钮能否把它放在'与上版对比'按钮的左边?因为思考过程结束后,这个按钮其实就基本不会使用的,不应该占据正文所在区域的空间" - -#### 布局调整方案 - -**移动前的布局**: -``` -Header: [标题] [与上版对比] [复制] [全屏] -推理区域: [🧠 思考过程 ▼] [生成中...] - [推理内容...] -正文区域: [主要内容] -``` - -**移动后的布局**: -``` -Header: [标题] [🧠 ▼] [与上版对比] [复制] [全屏] -推理区域: [🧠 思考过程] [生成中...] - [推理内容...] -正文区域: [主要内容] -``` - -#### 实现要点 - -1. **头部操作按钮重排**: - ```vue -
- - - - - - -
- ``` - -2. **推理区域简化**: - ```vue - -
- 🧠 - 思考过程 -
生成中...
-
- ``` - -3. **样式优化**: - ```scss - .reasoning-header-simple { - @apply flex items-center p-2 pb-1; - } - - .reasoning-toggle.rotate-180 { - @apply rotate-180; - } - ``` - -#### 用户体验改进 - -✅ **空间优化**:推理控制按钮移出内容区域,释放更多显示空间 -✅ **操作便捷**:思考过程控制按钮位置更显眼,优先级更高 -✅ **视觉清晰**:推理区域布局更简洁,减少视觉干扰 -✅ **功能分离**:头部统一管理所有操作按钮,布局更有序 - -#### 按钮优先级排序 - -1. **🧠 思考过程** - 最高优先级,影响内容显示 -2. **与上版对比** - 功能性操作 -3. **复制** - 常用操作 -4. **全屏** - 辅助功能 - -## 任务:核心包流式方法重构 - [已完成] +**任务状态:✅ 完全成功** +## 任务:架构重构:切换到高层服务代理IPC模型 - 2024-07-25 ### 目标 -切换到使用带思考过程的方法,重构 PromptService 中的流式方法以支持结构化响应。 +解决当前底层 `fetch` 代理方案因模拟不完善导致的脆弱性和兼容性问题。建立一个稳定、可维护、职责清晰的桌面端应用架构,将主进程作为后端服务提供者,渲染进程作为纯粹的前端消费者。 -### 完成情况 -- [x] 更新 optimizePromptStream 使用新的结构化流式响应 -- [x] 修改 testPromptStream 支持 onReasoningToken 回调 -- [x] 集成 iteratePromptStream 的结构化响应支持 -- [x] 修复相关测试用例 -- [x] 所有测试通过(337个测试中328个通过) +### 计划步骤 +- [ ] 1. **清理 `core` 包**: 移除所有特定于 Electron 的逻辑(如 `isRunningInElectron` 和 `fetch` 注入),使其回归为一个纯粹、平台无关的核心业务逻辑库。 +- [ ] 2. **改造 `main.js`**: 使其成为服务提供者,通过 `require('@prompt-optimizer/core')` 直接消费 `core` 包,并在主进程中实例化 `LLMService` 等核心服务。 +- [ ] 3. **实现主进程存储方案**: 为 `main.js` 中的服务提供一个适合 Node.js 环境的存储方案。第一阶段先实现一个临时的 `MemoryStorageProvider`。 +- [ ] 4. **重构 IPC 通信协议**: 废弃底层的 `api-fetch` 代理,在 `main.js` 和 `preload.js` 中建立基于 `ILLMService` 公共方法(如 `testConnection`, `sendMessageStream`)的高层 IPC 接口。 +- [ ] 5. **创建渲染进程代理**: 在 `core` 包中创建一个 `ElectronLLMProxy` 类,该类实现 `ILLMService` 接口,其内部方法通过 `window.electronAPI.llm.*` 调用 IPC 接口。 +- [ ] 6. **改造服务初始化逻辑**: 修改 `useServiceInitializer.ts`,使其能够根据当前环境(Web 或 Electron)判断,为应用提供真实的 `LLMService` 实例或 `ElectronLLMProxy` 代理实例。 -### 技术实现 -所有流式方法现在都: -- 使用 `await this.llmService.sendMessageStream()` -- 支持 `onToken` 和 `onReasoningToken` 回调 -- 在 `onComplete` 中接收结构化响应对象 -- 正确处理推理内容和主要内容的分离 +### 问题记录 +1. 底层`fetch`代理导致`AbortSignal`、`Headers`等对象在跨IPC传输时出现序列化和实例类型不匹配的问题,导致应用崩溃且难以维护。 + - 原因:试图模拟一个复杂且不稳定的底层Web API,违反了关注点分离原则。 + - 解决方案:切换到代理我们自己定义的高层、稳定的服务接口。 + - 经验总结:跨进程通信应基于稳定、简单、可序列化的数据结构和接口,避免代理复杂的底层原生对象。 + +### 里程碑 +- [ ] 完成方案设计与文档同步 +- [ ] 完成代码重构 +- [ ] 桌面应用在新架构下成功运行 +- [ ] 实现主进程的文件持久化存储 diff --git a/docs/singleton-refactor-plan.md b/docs/singleton-refactor-plan.md new file mode 100644 index 00000000..cddfb08c --- /dev/null +++ b/docs/singleton-refactor-plan.md @@ -0,0 +1,186 @@ +# 服务单例模式重构计划 (Singleton Refactor Plan) + +## 1. 问题背景 + +经过深入排查,我们发现当前架构存在一个核心缺陷:**服务实例在模块导入时被过早创建(Eager Instantiation)**,并作为单例(Singleton)在多个包之间导出和传递。 + +这导致了以下严重问题: + +1. **"幽灵"服务**:在Electron的渲染进程中,意外地创建了一套基于 `Dexie` (IndexedDB) 的Web端服务。这些服务虽然未被最终使用,但占用了资源并造成了数据混乱的假象。 +2. **状态不一致**:由于服务实例的创建不感知运行环境,导致UI进程(看到的是Web版实例状态)和主进程(实际执行逻辑)之间存在状态不一致。 +3. **架构耦合**:`@prompt-optimizer/ui` 包不必要地导出了核心服务实例,使其职责不清,更像一个服务中转站而非纯UI库。 +4. **测试困难**:单例模式使得在测试中隔离和模拟服务变得非常困难。 + +## 2. 重构目标 + +本次重构的核心目标是**实现服务的延迟初始化(Lazy Initialization)和依赖注入(Dependency Injection)**,确保只在需要时、在正确的环境中、创建唯一正确的服务实例。 + +- **移除单例导出**:任何包(`core`, `ui`)都不应再导出预先创建好的服务实例。 +- **统一初始化入口**:创建一个唯一的、环境感知的应用初始化器。 +- **清晰的职责划分**:`core` 只提供服务类和工厂函数,`ui` 只提供UI组件和Hooks,应用入口(`App.vue`)负责编排。 + +## 3. 实施计划 + +### 阶段一:改造 Core 包,移除单例导出 (已完成) + +**目标**:将所有服务的单例导出模式(`export const service = new Service()`) 改为工厂函数模式 (`export function createService()`)。 + +**步骤**: +1. **`services/storage/factory.ts`**: 移除 `storageProvider` 单例导出。 +2. **`services/model/manager.ts`**: 移除 `modelManager` 单例导出,并使 `createModelManager` 显式接收 `storageProvider`。 +3. **`services/template/manager.ts`**: 移除 `templateManager` 单例导出,并使其工厂函数接收依赖。 +4. **`services/history/manager.ts`**: 移除 `historyManager` 单例导出,并使其工厂函数接收依赖。 +5. **`index.ts`**: 更新入口文件,确保只导出模块和工厂函数,移除所有单例和不应由 Core 包暴露的代理(proxy)文件。 + +**期间发现的偏差及处理**: + +* **`TemplateManager` 的深层依赖**: + * **发现**:`TemplateManager` 依赖另一个未被发现的单例 `templateLanguageService`。 + * **措施**:对 `services/template/languageService.ts` 进行了相同的重构,移除了单例并创建了 `createTemplateLanguageService` 工厂函数。相应地,`createTemplateManager` 现在接收 `storageProvider` 和 `languageService` 两个实例作为参数。 + +* **`index.ts` 的导出清理**: + * **发现**:`index.ts` 导出了属于应用层的 `electron-proxy.ts` 文件。 + * **措施**:清理了 `index.ts`,移除了这些不应由 `core` 包暴露的导出项,使 API 更纯净。 + +### 阶段二:净化 UI 包,停止导出服务 + +**目标**:让 `@prompt-optimizer/ui` 回归其纯粹的UI库职责。 + +6. **`packages/ui/src/index.ts`** + - [ ] **移除**所有从 `@prompt-optimizer/core` 重新导出的服务实例,例如: + ```typescript + // --- 需要被删除的导出 --- + export { + templateManager, + modelManager, + historyManager, + dataManager, + storageProvider, + } from '@prompt-optimizer/core' + ``` + +### 阶段三:创建统一的应用初始化器 + +**目标**:将所有初始化逻辑收敛到一个可复用的 `composable` 中。 + +7. **创建 `packages/ui/src/composables/useAppInitializer.ts`** + - [ ] **目的**: 作为应用启动的唯一入口,负责环境判断和服务实例化。 + - [ ] **输入**: 无。 + - [ ] **输出**: + - `isInitializing` (ref): 一个布尔值,指示服务是否正在初始化。 + - `services` (ref): 一个包含所有服务实例的对象,初始化完成后才会有值。 + - [ ] **内部逻辑**: + 1. 在 `onMounted` 钩子中执行异步初始化逻辑,确保DOM环境可用。 + 2. 在函数内部创建 `storageProvider`。 + 3. 使用 `createModelManager(storageProvider)` 等工厂函数创建所有服务实例。 + 4. 将创建好的实例传入 `useServiceInitializer`,获取 `promptService`。 + 5. 将所有服务实例打包成一个对象,赋值给 `services` ref。 + 6. 在初始化开始和结束时,正确设置 `isInitializing` 的状态。 + +### 阶段四:重构应用入口 (`App.vue`) + +**目标**:让应用入口变得简洁,只负责消费初始化器返回的服务。 + +8. **修改 `packages/web/src/App.vue` & `packages/extension/src/App.vue`** + - [ ] **移除**: 所有对服务实例的直接导入(如 `import { modelManager } from ...`)。 + - [ ] **调用**: 在 ` \ No newline at end of file + + + \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74e0a6c5..48200e2a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.13 + electron-to-chromium: + specifier: ^1.5.177 + version: 1.5.177 lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -107,7 +110,7 @@ importers: version: 4.7.8 openai: specifier: ^4.83.0 - version: 4.83.0(ws@8.18.0)(zod@3.24.2) + version: 4.83.0(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2) uuid: specifier: ^11.0.5 version: 11.0.5 @@ -129,7 +132,23 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.2 - version: 3.0.5(@types/node@20.17.19)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.19)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) + + packages/desktop: + dependencies: + node-fetch: + specifier: ^2.7.0 + version: 2.7.0(encoding@0.1.13) + devDependencies: + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + electron: + specifier: ^37.1.0 + version: 37.1.0 + electron-builder: + specifier: ^24.0.0 + version: 24.13.3(electron-builder-squirrel-windows@24.13.3) packages/extension: dependencies: @@ -193,7 +212,7 @@ importers: version: 6.2.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) vitest: specifier: ^3.0.2 - version: 3.0.5(@types/node@22.13.4)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) packages/ui: dependencies: @@ -248,7 +267,7 @@ importers: version: 4.5.3(@types/node@22.13.10)(rollup@4.34.8)(typescript@5.8.2)(vite@6.2.1(@types/node@22.13.10)(jiti@1.21.7)(yaml@2.7.0)) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) packages/web: dependencies: @@ -306,10 +325,13 @@ importers: version: 6.2.1(@types/node@22.13.10)(jiti@1.21.7)(yaml@2.7.0) vitest: specifier: ^3.0.2 - version: 3.0.5(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) packages: + 7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -370,6 +392,32 @@ packages: resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} + '@develar/schema-utils@2.6.5': + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} + engines: {node: '>= 8.9.0'} + + '@electron/asar@3.4.1': + resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} + engines: {node: '>=10.12.0'} + hasBin: true + + '@electron/get@2.0.3': + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} + + '@electron/notarize@2.2.1': + resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==} + engines: {node: '>= 10.0.0'} + + '@electron/osx-sign@1.0.5': + resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/universal@1.5.1': + resolution: {integrity: sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==} + engines: {node: '>=8.6'} + '@element-plus/icons-vue@2.3.1': resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} peerDependencies: @@ -841,6 +889,14 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@malept/cross-spawn-promise@1.1.1': + resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} + engines: {node: '>= 10'} + + '@malept/flatpak-bundler@0.4.0': + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} + '@microsoft/api-extractor-model@7.30.4': resolution: {integrity: sha512-RobC0gyVYsd2Fao9MTKOfTdBm41P/bCMUmzS5mQ7/MoAKEqy0FOBph3JOYdq4X4BsEnMEiSHc+0NUNmdzxCpjA==} @@ -1102,9 +1158,17 @@ packages: '@rushstack/ts-command-line@4.23.6': resolution: {integrity: sha512-7WepygaF3YPEoToh4MAL/mmHkiIImQq3/uAkQX46kVoKTNOOlCtFGyNnze6OYuWw2o9rxsyrHVfIBKxq/am2RA==} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + '@sxzz/popperjs-es@2.11.7': resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + '@tailwindcss/forms@0.5.10': resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==} peerDependencies: @@ -1115,28 +1179,50 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + '@tsconfig/node18@18.2.4': resolution: {integrity: sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==} '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + '@types/handlebars@4.1.0': resolution: {integrity: sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==} deprecated: This is a stub types definition. handlebars provides its own type definitions, so you do not need this installed. + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} '@types/lodash@4.17.15': resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node-fetch@2.6.12': resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} @@ -1152,18 +1238,30 @@ packages: '@types/node@22.13.4': resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} + '@types/plist@3.0.5': + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} '@types/uuid@10.0.0': resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@types/verror@1.10.11': + resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} + '@types/web-bluetooth@0.0.16': resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/scope-manager@8.26.1': resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1338,6 +1436,10 @@ packages: '@vueuse/shared@9.13.0': resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + abbrev@3.0.0: resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1356,6 +1458,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agent-base@7.1.3: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} @@ -1380,6 +1486,11 @@ packages: ajv: optional: true + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1419,6 +1530,28 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + app-builder-bin@4.0.0: + resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} + + app-builder-lib@24.13.3: + resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 24.13.3 + electron-builder-squirrel-windows: 24.13.3 + + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -1436,10 +1569,22 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -1447,9 +1592,16 @@ packages: async-validator@4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -1464,6 +1616,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -1471,6 +1626,19 @@ packages: birpc@0.2.19: resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bluebird-lst@1.0.9: + resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1486,6 +1654,26 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal@1.0.1: + resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} + engines: {node: '>=0.4'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builder-util-runtime@9.2.4: + resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==} + engines: {node: '>=12.0.0'} + + builder-util@24.13.1: + resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1496,6 +1684,14 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1547,10 +1743,28 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chromium-pickle-js@0.2.0: + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1576,9 +1790,21 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1596,6 +1822,9 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + config-file-ts@0.2.6: + resolution: {integrity: sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==} + consola@3.4.0: resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -1604,6 +1833,24 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + + crc@3.8.0: + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} + cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -1667,6 +1914,10 @@ packages: decimal.js@10.5.0: resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -1674,6 +1925,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -1686,6 +1941,9 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dexie@4.0.11: resolution: {integrity: sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==} @@ -1696,16 +1954,35 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} + dir-compare@3.3.0: + resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==} + dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dmg-builder@24.13.3: + resolution: {integrity: sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==} + + dmg-license@1.0.11: + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + engines: {node: '>=8'} + os: [darwin] + hasBin: true + dompurify@3.2.4: resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} + dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + dotenv@9.0.2: + resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} + engines: {node: '>=10'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -1718,9 +1995,33 @@ packages: engines: {node: '>=14'} hasBin: true + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-builder-squirrel-windows@24.13.3: + resolution: {integrity: sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==} + + electron-builder@24.13.3: + resolution: {integrity: sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==} + engines: {node: '>=14.0.0'} + hasBin: true + + electron-publish@24.13.1: + resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==} + + electron-to-chromium@1.5.177: + resolution: {integrity: sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==} + electron-to-chromium@1.5.97: resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} + electron@37.1.0: + resolution: {integrity: sha512-Fcr3yfAw4oU392waVZSlrFUQx4P+h/k31+PRgkBY9tFx9E/zxzdPQQj0achZlG1HRDusw3ooQB+OXb9PvufdzA==} + engines: {node: '>= 12.20.55'} + hasBin: true + element-plus@2.9.4: resolution: {integrity: sha512-sGnW0wd9zf6lEGixXV2gfwx3X6VTMkP52qTkX7zbURJ2oariyslrKTBh2txt1sdn1pUvj2l0KY3OfSXoZGmDOw==} peerDependencies: @@ -1732,10 +2033,23 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1766,6 +2080,9 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esbuild@0.24.2: resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} @@ -1864,6 +2181,15 @@ packages: exsolve@1.0.4: resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1880,6 +2206,9 @@ packages: fastq@1.19.0: resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} peerDependencies: @@ -1892,6 +2221,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1929,10 +2261,29 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + fs-extra@11.3.0: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1963,6 +2314,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -1979,10 +2334,18 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -1995,6 +2358,10 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2048,14 +2415,33 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -2074,10 +2460,18 @@ packages: typescript: optional: true + iconv-corefoundation@1.1.7: + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} + engines: {node: ^8.11.2 || >=10} + os: [darwin] + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2094,6 +2488,13 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -2128,6 +2529,10 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -2215,15 +2620,31 @@ packages: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isbinaryfile@5.0.4: + resolution: {integrity: sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==} + engines: {node: '>= 18.0.0'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true @@ -2272,6 +2693,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -2281,6 +2705,9 @@ packages: resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -2290,6 +2717,13 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + lazy-val@1.0.5: + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2333,6 +2767,15 @@ packages: lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} @@ -2342,12 +2785,19 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -2362,6 +2812,10 @@ packages: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -2392,6 +2846,19 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true @@ -2402,6 +2869,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -2417,17 +2888,34 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -2454,6 +2942,9 @@ packages: nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + node-addon-api@1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -2487,6 +2978,10 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + normalize-wheel-es@1.2.0: resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} @@ -2518,6 +3013,9 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + openai@4.83.0: resolution: {integrity: sha512-fmTsqud0uTtRKsPC7L8Lu55dkaTwYucqncDHzVvO64DKOpNTuiYwjbR/nVgpapXuYy8xSnhQQPUm+3jQaxICgw==} hasBin: true @@ -2538,6 +3036,10 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2567,6 +3069,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} @@ -2596,6 +3102,9 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -2642,6 +3151,10 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -2717,9 +3230,23 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -2734,13 +3261,31 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-config-file@6.3.2: + resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==} + engines: {node: '>=12.0.0'} + read-pkg@3.0.0: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -2768,6 +3313,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2781,6 +3329,13 @@ packages: engines: {node: '>= 0.4'} hasBin: true + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2793,6 +3348,10 @@ packages: engines: {node: '>=14'} hasBin: true + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + rollup@4.34.6: resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2816,6 +3375,12 @@ packages: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -2827,14 +3392,27 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -2845,6 +3423,10 @@ packages: engines: {node: '>=10'} hasBin: true + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -2900,10 +3482,25 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -2934,9 +3531,16 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} + std-env@3.8.0: resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} @@ -2968,6 +3572,12 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2989,6 +3599,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + superjson@2.2.2: resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} engines: {node: '>=16'} @@ -3017,6 +3631,17 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -3053,6 +3678,13 @@ packages: resolution: {integrity: sha512-lBpoWgy+kYmuXWQ83+R7LlJCnsd9YW8DGpZSHhrMl4b8Ly/1vzOie3OdtmUJDkKxcgRGOehDu5btKkty+JEe+g==} hasBin: true + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3075,6 +3707,9 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + ts-api-utils@2.0.1: resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} @@ -3110,6 +3745,10 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -3160,6 +3799,10 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -3177,6 +3820,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3187,6 +3833,10 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + verror@1.10.1: + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} + engines: {node: '>=0.6.0'} + vite-node@3.0.5: resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -3417,6 +4067,9 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -3433,6 +4086,10 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -3460,15 +4117,24 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + zod@3.24.2: resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} snapshots: + 7zip-bin@5.2.0: {} + '@alloc/quick-lru@5.2.0': {} '@asamuzakjp/css-color@2.8.3': @@ -3518,6 +4184,62 @@ snapshots: '@ctrl/tinycolor@3.6.1': {} + '@develar/schema-utils@2.6.5': + dependencies: + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + '@electron/asar@3.4.1': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + + '@electron/get@2.0.3': + dependencies: + debug: 4.4.0 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@electron/notarize@2.2.1': + dependencies: + debug: 4.4.0 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.0.5': + dependencies: + compare-version: 0.1.2 + debug: 4.4.0 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/universal@1.5.1': + dependencies: + '@electron/asar': 3.4.1 + '@malept/cross-spawn-promise': 1.1.1 + debug: 4.4.0 + dir-compare: 3.3.0 + fs-extra: 9.1.0 + minimatch: 3.1.2 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + '@element-plus/icons-vue@2.3.1(vue@3.5.13(typescript@5.7.3))': dependencies: vue: 3.5.13(typescript@5.7.3) @@ -3848,6 +4570,19 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@malept/cross-spawn-promise@1.1.1': + dependencies: + cross-spawn: 7.0.6 + + '@malept/flatpak-bundler@0.4.0': + dependencies: + debug: 4.4.0 + fs-extra: 9.1.0 + lodash: 4.17.21 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - supports-color + '@microsoft/api-extractor-model@7.30.4(@types/node@20.17.19)': dependencies: '@microsoft/tsdoc': 0.15.1 @@ -4126,8 +4861,14 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@sindresorhus/is@4.6.0': {} + '@sxzz/popperjs-es@2.11.7': {} + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17)': dependencies: mini-svg-data-uri: 1.4.4 @@ -4141,27 +4882,52 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.17 + '@tootallnate/once@2.0.0': {} + '@tsconfig/node18@18.2.4': {} '@types/argparse@1.0.38': {} + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 22.13.10 + '@types/responselike': 1.0.3 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + '@types/estree@1.0.6': {} + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 22.13.10 + '@types/handlebars@4.1.0': dependencies: handlebars: 4.7.8 + '@types/http-cache-semantics@4.0.4': {} + '@types/json-schema@7.0.15': {} + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.13.10 + '@types/lodash-es@4.17.12': dependencies: '@types/lodash': 4.17.15 '@types/lodash@4.17.15': {} + '@types/ms@2.1.0': {} + '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.13.10 form-data: 4.0.1 '@types/node@18.19.75': @@ -4180,15 +4946,33 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/plist@3.0.5': + dependencies: + '@types/node': 22.13.10 + xmlbuilder: 15.1.1 + optional: true + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 22.13.10 + '@types/trusted-types@2.0.7': optional: true '@types/uuid@10.0.0': {} + '@types/verror@1.10.11': + optional: true + '@types/web-bluetooth@0.0.16': {} '@types/web-bluetooth@0.0.20': {} + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.13.10 + optional: true + '@typescript-eslint/scope-manager@8.26.1': dependencies: '@typescript-eslint/types': 8.26.1 @@ -4499,6 +5283,8 @@ snapshots: - '@vue/composition-api' - vue + '@xmldom/xmldom@0.8.10': {} + abbrev@3.0.0: {} abort-controller@3.0.0: @@ -4511,6 +5297,12 @@ snapshots: acorn@8.14.1: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + agent-base@7.1.3: {} agentkeepalive@4.6.0: @@ -4525,6 +5317,10 @@ snapshots: optionalDependencies: ajv: 8.13.0 + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -4569,6 +5365,78 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + app-builder-bin@4.0.0: {} + + app-builder-lib@24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/notarize': 2.2.1 + '@electron/osx-sign': 1.0.5 + '@electron/universal': 1.5.1 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + bluebird-lst: 1.0.9 + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 + chromium-pickle-js: 0.2.0 + debug: 4.4.0 + dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) + ejs: 3.1.10 + electron-builder-squirrel-windows: 24.13.3(dmg-builder@24.13.3) + electron-publish: 24.13.1 + form-data: 4.0.1 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.4 + js-yaml: 4.1.0 + lazy-val: 1.0.5 + minimatch: 5.1.6 + read-config-file: 6.3.2 + sanitize-filename: 1.6.3 + semver: 7.7.1 + tar: 6.2.1 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + + archiver-utils@2.1.0: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + + archiver-utils@3.0.4: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + archiver@5.3.2: + dependencies: + archiver-utils: 2.1.0 + async: 3.2.6 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 + arg@5.0.2: {} argparse@1.0.10: @@ -4592,14 +5460,26 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + assert-plus@1.0.0: + optional: true + assertion-error@2.0.1: {} + astral-regex@2.0.0: + optional: true + + async-exit-hook@2.0.1: {} + async-function@1.0.0: {} async-validator@4.2.5: {} + async@3.2.6: {} + asynckit@0.4.0: {} + at-least-node@1.0.0: {} + autoprefixer@10.4.20(postcss@8.5.2): dependencies: browserslist: 4.24.4 @@ -4616,10 +5496,27 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + binary-extensions@2.3.0: {} birpc@0.2.19: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bluebird-lst@1.0.9: + dependencies: + bluebird: 3.7.2 + + bluebird@3.7.2: {} + + boolean@3.2.0: + optional: true + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -4640,6 +5537,45 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) + buffer-crc32@0.2.13: {} + + buffer-equal@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builder-util-runtime@9.2.4: + dependencies: + debug: 4.4.0 + sax: 1.4.1 + transitivePeerDependencies: + - supports-color + + builder-util@24.13.1: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 4.0.0 + bluebird-lst: 1.0.9 + builder-util-runtime: 9.2.4 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + fs-extra: 10.1.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-ci: 3.0.1 + js-yaml: 4.1.0 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + bundle-require@5.1.0(esbuild@0.24.2): dependencies: esbuild: 0.24.2 @@ -4647,6 +5583,18 @@ snapshots: cac@6.7.14: {} + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -4715,12 +5663,28 @@ snapshots: dependencies: readdirp: 4.1.1 + chownr@2.0.0: {} + + chromium-pickle-js@0.2.0: {} + + ci-info@3.9.0: {} + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + optional: true + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -4741,8 +5705,19 @@ snapshots: commander@4.1.1: {} + commander@5.1.0: {} + + compare-version@0.1.2: {} + compare-versions@6.1.1: {} + compress-commons@4.1.2: + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + concat-map@0.0.1: {} concurrently@8.2.2: @@ -4766,12 +5741,34 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 + config-file-ts@0.2.6: + dependencies: + glob: 10.4.5 + typescript: 5.8.2 + consola@3.4.0: {} copy-anything@3.0.5: dependencies: is-what: 4.1.16 + core-util-is@1.0.2: + optional: true + + core-util-is@1.0.3: {} + + crc-32@1.2.2: {} + + crc32-stream@4.0.3: + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + + crc@3.8.0: + dependencies: + buffer: 5.7.1 + optional: true + cross-env@7.0.3: dependencies: cross-spawn: 7.0.6 @@ -4836,10 +5833,16 @@ snapshots: decimal.js@10.5.0: {} + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + deep-eql@5.0.2: {} deep-is@0.1.4: {} + defer-to-connect@2.0.1: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -4854,20 +5857,58 @@ snapshots: delayed-stream@1.0.0: {} + detect-node@2.1.0: + optional: true + dexie@4.0.11: {} didyoumean@1.2.2: {} diff@8.0.2: {} + dir-compare@3.3.0: + dependencies: + buffer-equal: 1.0.1 + minimatch: 3.1.2 + dlv@1.1.3: {} + dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3): + dependencies: + app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 + fs-extra: 10.1.0 + iconv-lite: 0.6.3 + js-yaml: 4.1.0 + optionalDependencies: + dmg-license: 1.0.11 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + dmg-license@1.0.11: + dependencies: + '@types/plist': 3.0.5 + '@types/verror': 1.10.11 + ajv: 6.12.6 + crc: 3.8.0 + iconv-corefoundation: 1.1.7 + plist: 3.1.0 + smart-buffer: 4.2.0 + verror: 1.10.1 + optional: true + dompurify@3.2.4: optionalDependencies: '@types/trusted-types': 2.0.7 + dotenv-expand@5.1.0: {} + dotenv@16.4.7: {} + dotenv@9.0.2: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4883,8 +5924,61 @@ snapshots: minimatch: 9.0.1 semver: 7.7.1 + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3): + dependencies: + app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) + archiver: 5.3.2 + builder-util: 24.13.1 + fs-extra: 10.1.0 + transitivePeerDependencies: + - dmg-builder + - supports-color + + electron-builder@24.13.3(electron-builder-squirrel-windows@24.13.3): + dependencies: + app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 + chalk: 4.1.2 + dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) + fs-extra: 10.1.0 + is-ci: 3.0.1 + lazy-val: 1.0.5 + read-config-file: 6.3.2 + simple-update-notifier: 2.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + electron-publish@24.13.1: + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 + chalk: 4.1.2 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + + electron-to-chromium@1.5.177: {} + electron-to-chromium@1.5.97: {} + electron@37.1.0: + dependencies: + '@electron/get': 2.0.3 + '@types/node': 22.13.10 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color + element-plus@2.9.4(vue@3.5.13(typescript@5.7.3)): dependencies: '@ctrl/tinycolor': 3.6.1 @@ -4931,8 +6025,21 @@ snapshots: emoji-regex@9.2.2: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + entities@4.5.0: {} + env-paths@2.2.1: {} + + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -5014,6 +6121,9 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es6-error@4.1.1: + optional: true + esbuild@0.24.2: optionalDependencies: '@esbuild/aix-ppc64': 0.24.2 @@ -5175,6 +6285,19 @@ snapshots: exsolve@1.0.4: {} + extract-zip@2.0.1: + dependencies: + debug: 4.4.0 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + extsprintf@1.4.1: + optional: true + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -5193,6 +6316,10 @@ snapshots: dependencies: reusify: 1.0.4 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -5201,6 +6328,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -5241,12 +6372,37 @@ snapshots: fraction.js@4.3.7: {} + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -5285,6 +6441,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + get-symbol-description@1.1.0: dependencies: call-bound: 1.0.3 @@ -5308,6 +6468,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + glob@9.3.5: dependencies: fs.realpath: 1.0.0 @@ -5315,6 +6484,16 @@ snapshots: minipass: 4.2.8 path-scurry: 1.11.1 + global-agent@3.0.0: + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.7.1 + serialize-error: 7.0.1 + optional: true + globals@14.0.0: {} globalthis@1.0.4: @@ -5324,6 +6503,20 @@ snapshots: gopd@1.2.0: {} + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + graceful-fs@4.2.11: {} handlebars@4.7.8: @@ -5367,10 +6560,24 @@ snapshots: hosted-git-info@2.8.9: {} + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 + http-cache-semantics@4.2.0: {} + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 @@ -5378,6 +6585,18 @@ snapshots: transitivePeerDependencies: - supports-color + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 @@ -5399,10 +6618,18 @@ snapshots: optionalDependencies: typescript: 5.8.2 + iconv-corefoundation@1.1.7: + dependencies: + cli-truncate: 2.1.0 + node-addon-api: 1.7.2 + optional: true + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} import-fresh@3.3.1: @@ -5414,6 +6641,13 @@ snapshots: imurmurhash@0.1.4: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + ini@1.3.8: {} internal-slot@1.1.0: @@ -5453,6 +6687,10 @@ snapshots: is-callable@1.2.7: {} + is-ci@3.0.1: + dependencies: + ci-info: 3.9.0 + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -5539,8 +6777,14 @@ snapshots: is-what@4.1.16: {} + isarray@1.0.0: {} + isarray@2.0.5: {} + isbinaryfile@4.0.10: {} + + isbinaryfile@5.0.4: {} + isexe@2.0.0: {} jackspeak@3.4.3: @@ -5549,6 +6793,13 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + jiti@1.21.7: {} jju@1.4.0: {} @@ -5607,6 +6858,9 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: + optional: true + json5@2.2.3: {} jsonc-eslint-parser@2.4.0: @@ -5616,6 +6870,10 @@ snapshots: espree: 9.6.1 semver: 7.7.1 + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + jsonfile@6.1.0: dependencies: universalify: 2.0.1 @@ -5628,6 +6886,12 @@ snapshots: kolorist@1.8.0: {} + lazy-val@1.0.5: {} + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -5670,16 +6934,26 @@ snapshots: lodash.castarray@4.4.0: {} + lodash.defaults@4.2.0: {} + + lodash.difference@4.5.0: {} + + lodash.flatten@4.4.0: {} + lodash.isplainobject@4.0.6: {} lodash.merge@4.6.2: {} lodash.sortby@4.7.0: {} + lodash.union@4.6.0: {} + lodash@4.17.21: {} loupe@3.1.3: {} + lowercase-keys@2.0.0: {} + lru-cache@10.4.3: {} lru-cache@6.0.0: @@ -5699,6 +6973,11 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + matcher@3.0.0: + dependencies: + escape-string-regexp: 4.0.0 + optional: true + math-intrinsics@1.1.0: {} mdurl@2.0.0: {} @@ -5720,6 +6999,12 @@ snapshots: dependencies: mime-db: 1.52.0 + mime@2.6.0: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + mini-svg-data-uri@1.4.4: {} minimatch@3.0.8: @@ -5730,6 +7015,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@8.0.4: dependencies: brace-expansion: 2.0.1 @@ -5744,12 +7033,25 @@ snapshots: minimist@1.2.8: {} + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + minipass@4.2.8: {} + minipass@5.0.0: {} + minipass@7.1.2: {} + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + mitt@3.0.1: {} + mkdirp@1.0.4: {} + mlly@1.7.4: dependencies: acorn: 8.14.1 @@ -5775,11 +7077,16 @@ snapshots: nice-try@1.0.5: {} + node-addon-api@1.7.2: + optional: true + node-domexception@1.0.0: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-releases@2.0.19: {} @@ -5798,6 +7105,8 @@ snapshots: normalize-range@0.1.2: {} + normalize-url@6.1.0: {} + normalize-wheel-es@1.2.0: {} npm-run-all@4.1.5: @@ -5831,7 +7140,11 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - openai@4.83.0(ws@8.18.0)(zod@3.24.2): + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + openai@4.83.0(encoding@0.1.13)(ws@8.18.0)(zod@3.24.2): dependencies: '@types/node': 18.19.75 '@types/node-fetch': 2.6.12 @@ -5839,7 +7152,7 @@ snapshots: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: ws: 8.18.0 zod: 3.24.2 @@ -5861,6 +7174,8 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + p-cancelable@2.1.1: {} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -5888,6 +7203,8 @@ snapshots: path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@2.0.1: {} path-key@3.1.1: {} @@ -5909,6 +7226,8 @@ snapshots: pathval@2.0.0: {} + pend@1.2.0: {} + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -5944,6 +7263,12 @@ snapshots: exsolve: 1.0.4 pathe: 2.0.3 + plist@3.1.0: + dependencies: + '@xmldom/xmldom': 0.8.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + possible-typed-array-names@1.1.0: {} postcss-import@15.1.0(postcss@8.5.2): @@ -6004,8 +7329,22 @@ snapshots: prelude-ls@1.2.1: {} + process-nextick-args@2.0.1: {} + + progress@2.0.3: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + proto-list@1.2.4: {} + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -6014,16 +7353,47 @@ snapshots: queue-microtask@1.2.3: {} + quick-lru@5.1.1: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 + read-config-file@6.3.2: + dependencies: + config-file-ts: 0.2.6 + dotenv: 9.0.2 + dotenv-expand: 5.1.0 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -6056,6 +7426,8 @@ snapshots: require-from-string@2.0.2: {} + resolve-alpn@1.2.1: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -6066,6 +7438,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + retry@0.12.0: {} + reusify@1.0.4: {} rfdc@1.4.1: {} @@ -6074,6 +7452,16 @@ snapshots: dependencies: glob: 9.3.5 + roarr@2.15.4: + dependencies: + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.4 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + optional: true + rollup@4.34.6: dependencies: '@types/estree': 1.0.6 @@ -6142,6 +7530,10 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -6155,18 +7547,34 @@ snapshots: safer-buffer@2.1.2: {} + sanitize-filename@1.6.3: + dependencies: + truncate-utf8-bytes: 1.0.2 + + sax@1.4.1: {} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 + semver-compare@1.0.0: + optional: true + semver@5.7.2: {} + semver@6.3.1: {} + semver@7.5.4: dependencies: lru-cache: 6.0.0 semver@7.7.1: {} + serialize-error@7.0.1: + dependencies: + type-fest: 0.13.1 + optional: true + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -6235,8 +7643,27 @@ snapshots: signal-exit@4.1.0: {} + simple-update-notifier@2.0.0: + dependencies: + semver: 7.7.1 + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + optional: true + + smart-buffer@4.2.0: + optional: true + source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} source-map@0.8.0-beta.0: @@ -6263,8 +7690,13 @@ snapshots: sprintf-js@1.0.3: {} + sprintf-js@1.1.3: + optional: true + stackback@0.0.2: {} + stat-mode@1.0.0: {} + std-env@3.8.0: {} string-argv@0.3.2: {} @@ -6311,6 +7743,14 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -6333,6 +7773,12 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 + sumchecker@3.0.1: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + superjson@2.2.2: dependencies: copy-anything: 3.0.5 @@ -6380,6 +7826,28 @@ snapshots: transitivePeerDependencies: - ts-node + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + temp-file@3.4.0: + dependencies: + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -6409,6 +7877,12 @@ snapshots: dependencies: tldts-core: 6.1.77 + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + + tmp@0.2.3: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -6429,6 +7903,10 @@ snapshots: tree-kill@1.2.2: {} + truncate-utf8-bytes@1.0.2: + dependencies: + utf8-byte-length: 1.0.5 + ts-api-utils@2.0.1(typescript@5.8.2): dependencies: typescript: 5.8.2 @@ -6469,6 +7947,9 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@0.13.1: + optional: true + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.3 @@ -6526,6 +8007,8 @@ snapshots: undici-types@6.20.0: {} + universalify@0.1.2: {} + universalify@2.0.1: {} unplugin@1.16.1: @@ -6543,6 +8026,8 @@ snapshots: dependencies: punycode: 2.3.1 + utf8-byte-length@1.0.5: {} + util-deprecate@1.0.2: {} uuid@11.0.5: {} @@ -6552,6 +8037,13 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + verror@1.10.1: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + optional: true + vite-node@3.0.5(@types/node@20.17.19)(jiti@1.21.7)(yaml@2.7.0): dependencies: cac: 6.7.14 @@ -6688,7 +8180,7 @@ snapshots: jiti: 1.21.7 yaml: 2.7.0 - vitest@3.0.5(@types/node@20.17.19)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.17.19)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 '@vitest/mocker': 3.0.5(vite@6.2.1(@types/node@20.17.19)(jiti@1.21.7)(yaml@2.7.0)) @@ -6711,6 +8203,7 @@ snapshots: vite-node: 3.0.5(@types/node@20.17.19)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: + '@types/debug': 4.1.12 '@types/node': 20.17.19 jsdom: 26.0.0 transitivePeerDependencies: @@ -6727,7 +8220,7 @@ snapshots: - tsx - yaml - vitest@3.0.5(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 '@vitest/mocker': 3.0.5(vite@6.2.1(@types/node@22.13.10)(jiti@1.21.7)(yaml@2.7.0)) @@ -6750,6 +8243,7 @@ snapshots: vite-node: 3.0.5(@types/node@22.13.10)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: + '@types/debug': 4.1.12 '@types/node': 22.13.10 jsdom: 26.0.0 transitivePeerDependencies: @@ -6766,7 +8260,7 @@ snapshots: - tsx - yaml - vitest@3.0.5(@types/node@22.13.4)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 '@vitest/mocker': 3.0.5(vite@6.2.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) @@ -6789,6 +8283,7 @@ snapshots: vite-node: 3.0.5(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: + '@types/debug': 4.1.12 '@types/node': 22.13.4 jsdom: 26.0.0 transitivePeerDependencies: @@ -6805,7 +8300,7 @@ snapshots: - tsx - yaml - vitest@3.0.7(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.10)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 '@vitest/mocker': 3.0.7(vite@6.2.1(@types/node@22.13.10)(jiti@1.21.7)(yaml@2.7.0)) @@ -6828,6 +8323,7 @@ snapshots: vite-node: 3.0.7(@types/node@22.13.10)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: + '@types/debug': 4.1.12 '@types/node': 22.13.10 jsdom: 26.0.0 transitivePeerDependencies: @@ -6988,10 +8484,14 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrappy@1.0.2: {} + ws@8.18.0: {} xml-name-validator@5.0.0: {} + xmlbuilder@15.1.1: {} + xmlchars@2.2.0: {} y18n@5.0.8: {} @@ -7017,6 +8517,17 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + yocto-queue@0.1.0: {} + zip-stream@4.1.1: + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 + zod@3.24.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ca0f3022..14ff4fc8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,7 @@ packages: - - 'packages/*' \ No newline at end of file + - packages/* +ignoredBuiltDependencies: + - electron + - electron-winstaller + - esbuild + - vue-demi