128 Commits
Author SHA1 Message Date
linshen 5b995b94ea fix(security): update Vite and patch esbuild 2026-09-10 20:09:56 +08:00
linshen e4a281f42d fix: restore model setup access and update dependencies 2026-09-10 15:49:53 +08:00
linshen 75aeb5ba66 fix(web): restore root env loading
- Restore root .env loading for web Vite builds.
- Keep extension release env isolation intact.
- Cover package script behavior with node tests.
2026-05-16 13:31:18 +08:00
linshen 269df1dcf7 fix(release): isolate extension build env
- Split extension release builds from web env loading.
- Add a release secret guard for extension packaging.
- Keep web and extension Vite configs from leaking incompatible env.
2026-05-15 23:38:52 +08:00
linshen 4accdf1417 feat(prompt-garden): add discovery import entry
- Add environment defaults and Vite proxy configuration for Prompt Garden discovery
- Expose discovery import controls from workspace utility surfaces
- Wire image text-to-image import affordances and localized copy
- Document configuration and cover environment/UI behavior with tests
2026-05-02 22:20:01 +08:00
linshen 54fbd76685 fix(i18n): restore locale defaults and localized feedback
- restore locale bootstrap defaults across UI and MCP startup paths
- localize template, context editor, favorites, Prompt Garden, and history feedback toasts
- isolate UI consumer typechecks needed by the localization rollout
- add regression tests covering english-first runtime behavior and localized fallbacks
2026-04-09 22:17:34 +08:00
linshen 37d6fa564c build(deps): prune redundant deps and fix ui type outputs
- remove redundant direct dependencies that are no longer used
- restore UI library type build outputs after the dependency cleanup
- keep Tailwind/PostCSS-related package config aligned with actual usage
2026-03-27 21:26:43 +08:00
linshen e69086f075 build(deps): refresh workspace dependency baselines
- refresh direct dependency baselines across workspace packages
- require Node 22 consistently in docs, Docker, and package engines
- update lint/build tooling configs to match the new workspace baseline
- keep package manifests and lockfile aligned after the dependency refresh
2026-03-27 20:41:18 +08:00
linshen 44394af2bc fix(icons): standardize rounded app icon exports
Use images/logo/1024-1024.svg as the source of truth and regenerate desktop/web/extension/docs icon assets with a consistent rounded alpha mask. Refs #211.
2026-02-27 21:06:12 +08:00
linshen 5927aebf10 fix(ui): sync updater modal with theme 2026-02-01 11:52:03 +08:00
linshen fb48b3664e fix(integrations): unify prompt-garden env resolution 2026-01-31 16:48:51 +08:00
linshen 062c2eb9d5 feat(router): 优化路由初始化和工作区布局
- 重构工作区布局并改进端到端测试
- 重构根路径路由引导和模型选择逻辑
- 解决路由初始化时机问题避免误重定向
2026-01-12 22:36:00 +08:00
linshen 69bffd4260 refactor(ui): 完善单一真源架构解决跨模式状态污染
- 修复跨模式状态污染问题,实现单一真源架构
- 完善单一真源架构并优化代码分割
- 归档 Session Store 单一真源重构文档
- 将未完成的迁移指南移回 workspace
2026-01-02 16:52:00 +08:00
linshen 6d21babfdd refactor(ui): 引入 Pinia 状态管理并重构服务访问
- 引入 Pinia 状态管理:创建 promptDraft store 和多个 session stores
- 重构服务访问:移除 $services 插件,统一服务访问方式
- 修复 session 存储竞态条件:使用 Pinia 的响应式系统
- 归档 Pinia 重构文档:记录完整的迁移过程
- 修正 MCP server bin 入口配置
2026-01-01 14:23:00 +08:00
linshen 6880e22811 refactor(ui): 拆分 App.vue 到共享组件,消除 web/extension 代码重复
- 新增 PromptOptimizerApp 作为主应用组件,统一 web 和 extension 核心逻辑
- 新增 BasicModeWorkspace 组件封装基础模式工作区布局
- 新增 AppCoreNav 和 AppHeaderActions 组件拆分导航和操作按钮
- 新增 useAppHistoryRestore 和 useAppFavorite composables 封装业务逻辑
- 简化 web/extension App.vue 为轻量级入口组件 (~25 行)
- 扩展 ConversationMessage 类型支持历史恢复功能
- 添加相关 i18n 翻译键

重构效果:
- 消除 2428 行 100% 重复代码
- 单点维护,集中管理
- 构建和测试全部通过
2025-12-19 11:30:13 +08:00
linshen b7cab01197 fix(evaluation): 修复代码审查报告中的多项问题
修复项:
- §4.1: 使用 jsonrepair 库优化 JSON 解析鲁棒性
- §4.2: 规范化 isOptimizedBetter 字段为 boolean 类型
- §4.4: 支持中文变量名回退扫描(正则改为 [^{}]+)
- §4.5: 为单例模式添加架构约束注释说明
- §4.6: 移除 useEvaluation 和 useFunctionModelManager 中的 as any
- §4.8: 复用 createApplyImprovementHandler 工厂方法
- §4.9: 确认 UI 包导出变更无外部依赖影响

延后处理:
- §4.7: Extension App.vue 拆分(大工程)

不修复:
- §4.3: 默认打开面板策略(计划移除详情面板)
2025-12-19 11:29:35 +08:00
linshen a56ae11c4a refactor(ui): 重构测试控制栏布局并清理废弃代码
- TestControlBar: 使用 CSS Grid 重构布局,确保右侧控制按钮不被遮挡
- TestControlBar: 添加响应式断点,900px 隐藏标签,640px 改为单列布局
- SelectWithConfig: 添加默认 minWidth: 160px 防止下拉框被压缩
- useFunctionModelManager: 修复单例模式下 globalOptimizeModelKey 参数更新问题
- 移除废弃组件: BasicTestMode.vue, ModelSelect.vue
- 移除废弃 props: modelProvider, controlBarLayout, testModelProvider
- ImageWorkspace: 简化模型信息显示,移除提供商和能力标签
- 更新文档: SelectWithConfig 替代 ModelSelectUI
2025-12-19 11:29:32 +08:00
linshen 5730dca9fb feat(ui): 在测试模型选择器旁添加提供商和模型名称标签
- TestControlBar: 添加 modelProvider/modelName props 和 NTag 显示
- 屏幕宽度 ≤900px 时自动隐藏标签避免布局问题
- 基础模式、高级模式(系统/用户)均支持显示模型信息标签
- 与图像模式保持一致的视觉效果
2025-12-19 11:29:28 +08:00
linshen 2e20b0cd2b refactor(ui): 优化高级模式测试区域布局结构,统一图像模式和基础模式测试面板布局
- **统一布局结构**:图像模式、基础模式和高级模式测试面板布局保持一致,提升用户体验。
  - 使用 `NCard` 包裹测试控制栏和输入区域,使左右两侧卡片结构对称。
  - 使用 `NFlex gap` 替换 `marginBottom` 实现统一间距管理。
  - 移除冗余的 `div` 包装层、`NFlex` 和 `NCard` 层级,节省垂直空间。
- **简化UI**:
  - 移除冗余的"测试区域"标题卡片。
  - 将"全局变量"按钮整合到临时变量卡片的 header 区域。
- **代码优化**:
  - 移除测试运行时隐藏变量表单的逻辑,保持始终可见。
  - 清理未使用的 `useBreakpoints` / `isMobile` 和 `showVariableForm`。
2025-12-19 11:29:26 +08:00
linshen b9d34dc472 feat(evaluation): 实现 LLM 智能评估与多模式支持,集成 UI 并优化评分策略
- **核心功能**
  - 新增 LLM 智能评估功能,支持非流式和流式评估 (EvaluationService)
  - 新增三种评估类型:原始提示词评估、优化后评估、对比评估
  - 新增评估模板 (evaluation 类型),支持中英双语
  - 新增评估 UI 组件:EvaluationPanel、EvaluationScoreBadge、EvaluateButton
  - 新增 useEvaluation 和 useEvaluationHandler composables
  - 评估结果包含四维度评分:目标达成度、输出质量、格式规范性、相关性
  - 支持流式输出实时显示评估过程
  - 解析失败时抛出明确错误,避免误导性默认值
  - 完整的 i18n 支持 (zh-CN, zh-TW, en-US)
- **多模式评估系统**
  - 新增 EvaluationModeConfig 接口支持 functionMode 和 subMode 配置
  - 重构评估模板目录结构,按 basic/system 和 basic/user 组织
  - 动态生成模板 ID:evaluation-{functionMode}-{subMode}-{type}
  - 新增 basic-user 模式的 6 个评估模板(中英文各 3 个)
  - UI 层添加 currentSubMode 计算属性和模式参数传递
- **高级模式集成**
  - 新增 Pro-System 和 Pro-User 评估模板 (12 个模板文件)
  - 扩展评估类型定义,添加 ProSystemEvaluationContext 和 ProUserEvaluationContext
  - 为 ConversationTestPanel 和 ContextUserTestPanel 添加评估 props 透传
  - 在 ContextSystemWorkspace 集成评估功能 (useEvaluationHandler + EvaluationPanel)
  - 在 ContextUserWorkspace 集成评估功能 (useEvaluationHandler + EvaluationPanel)
  - 支持构建 Pro 模式专属评估上下文 (多消息上下文/变量上下文)
- **评估改进建议应用与优化**
  - 新增评估改进建议的"应用"按钮,可一键填充到迭代优化输入框
  - 优化评估模板,添加"防止过拟合"指导原则
  - 明确评估对象是系统提示词而非测试输入
  - 改进建议强制要求通用性,禁止针对具体测试内容
  - 修复对比评估改进建议"使用"按钮无响应问题
- **字段命名与评分策略优化**
  - 简化评估响应字段:analysis→issues, suggestions→improvements, improvementSummary→summary
  - 新增 EvaluationHoverCard 悬浮卡片组件,支持直接触发评估
  - 优化所有评估模板,采用更严格的评分原则
  - 对比评估以 50 分为基准,>50 表示优化有效,<50 表示退步
  - 明确区分 issues(针对输出问题)和 improvements(针对提示词改进)
2025-12-19 11:29:21 +08:00
linshen f014ffc311 fix(ui): 移除高级-变量模式中冗余的测试内容输入框
修复 v2.3.0 引入的 regression bug (1970a2b):
- 高级-变量模式错误显示了测试内容输入框
- 该输入框在变量模式下是冗余的,用户应通过变量系统管理输入

变更内容:
- ContextUserTestPanel: 移除 TestInputSection 及相关 props/emits
- ContextUserWorkspace: 移除 testContent prop 和相关事件
- useContextUserTester: 移除 executeTest 的 testContent 参数
- App.vue: 移除 ContextUserWorkspace 的 test-content 绑定

基础模式的测试内容输入框保持不变
2025-12-15 23:06:49 +08:00
linshen c3c46b6e83 fix(deps): 升级 vitest 和 tsup 修复 vite 漏洞
- vitest: 3.2.4 → 4.0.15 (vite-node 不再依赖旧版 vite)
- tsup: 8.5.0 → 8.5.1

修复 Dependabot 警报:
- #21 vite server.fs.deny bypass
- #18 vite public directory 文件泄露
- #17 vite HTML 文件未应用 server.fs 设置
2025-12-07 16:30:05 +08:00
linshen fe961eb4f5 fix(deps): 修复多个安全漏洞
升级直接依赖:
- @google/genai: 1.19.0 → 1.32.0 (修复 jws HMAC 签名验证漏洞)
- vite: 6.x → 7.2.7 (修复 3 个安全漏洞)
- electron: 37.1.0 → 39.2.6 (修复 ASAR 完整性绕过)
- electron-builder: 24.13.3 → 26.0.12
- electron-builder-squirrel-windows: 新增 26.0.12
- electron-updater: 6.3.9 → 6.6.2
- vue-i18n: 10.0.6 → 11.2.2 (修复 XSS 漏洞)
- @modelcontextprotocol/sdk: 1.16.0 → 1.24.3 (修复 DNS 重绑定)
- element-plus: 2.10.2 → 2.12.0 (修复 el-link href 验证)
- @typescript-eslint/*: 6.21.0 → 8.49.0 (支持 TypeScript 5.8.3)

自动修复的传递依赖:
- jws: 4.0.1, form-data: 4.0.5, tmp: 0.2.5
- body-parser: 2.2.1, @eslint/plugin-kit: 0.3.5

其他:
- 修复 lint 错误 (未使用的 catch 变量添加 _ 前缀)
2025-12-07 15:59:24 +08:00
linshen e29036bc24 fix(ui): 修复基础模式切换污染 contextMode 导致上下文模式显示错误
基础模式子模式切换不再修改 contextMode,该变量仅用于上下文模式的界面渲染控制
2025-12-07 11:15:09 +08:00
linshen c8344fe96c feat(ui): 移除系统模式环境变量限制,调整子模式按钮顺序
- useProSubMode: 移除 isDevelopment 依赖,系统模式(多对话)默认可用
- OptimizationModeSelector: 基础模式(系统|用户),上下文模式(变量|多对话)
- App.vue: 移除 hide-system-option 限制,多消息按钮在任何环境下可见
2025-12-07 10:33:03 +08:00
linshen e4726cebce refactor(ui): 移除 quickTemplates 快速模板功能
- 删除 quickTemplates 数据目录及相关类型定义
- 移除 ContextEditor 中的模板管理标签页和预览弹窗
- 简化 App.vue 中的默认模板加载逻辑,改用硬编码默认值
- 清理 useContextManagement 中的自动加载模板逻辑
- 移除 useContextEditorUIState 中的 templates 标签页类型
- 清理 i18n 翻译文件中的模板相关 key
- 更新相关测试文件,移除模板 mock 和测试用例
2025-11-23 16:20:15 +08:00
linshen dee32ae979 feat(ui): 将工具管理功能独立为 ToolManagerModal 组件
- 新增 ToolManagerModal 独立组件,提供完整的工具 CRUD 功能
- ConversationManager 中工具数量标签改为可点击,始终显示(包括 0)
- 移除 ContextEditor 中的工具管理标签页,避免功能重复
- 清理 ContextEditor 中未使用的代码(净减少 244 行)
- 修复 Vue 警告:移除 ContextEditor 的 context-mode 属性
- 统一架构模式:与 VariableManagerModal 保持一致

变更文件:
- 新增:packages/ui/src/components/tool/ToolManagerModal.vue
- 修改:ConversationManager, ContextEditor, ContextSystemWorkspace
- 修改:App.vue (web & extension), types/components.ts, index.ts
2025-11-22 19:30:41 +08:00
linshen 1970a2bac9 refactor(ui): 重构上下文模式测试面板架构,实现职责分离
- 新增 ContextUserTestPanel 组件,专门处理 Context User 模式
- 简化 TestAreaPanel,移除多模式判断逻辑,仅保留 Basic Mode
- 移除 contextMode prop,各组件职责更加清晰
- 修复 ConversationTestPanel 和 ContextUserTestPanel 的定时器内存泄漏
- 更新相关组件和类型定义,保持 API 一致性

变更影响:
- TestAreaPanel: 从 780 行减少到 380 行
- 新增 ContextUserTestPanel: 630 行专用组件
- 架构更清晰:Basic/ContextUser/ContextSystem 各自独立
2025-11-22 13:38:52 +08:00
linshen 7b5ed1ee41 fix(ui): 统一修复测试界面闪烁、历史恢复异常、状态同步错误及兼容性问题
全面修复 Context 模式下的多个关键稳定性与兼容性问题,提升用户体验与可维护性:

1. 修复测试界面状态异常与闪烁问题:
   - 移除 TestAreaPanel 中 `showVariableForm` 对 `isTestRunning` 的错误依赖
   - 改用 ContextSystemWorkspace 内部的 conversationTester 状态管理测试运行状态,避免外部硬编码 prop 导致的状态不一致
   - 确保变量表单在测试期间持续可见,解决界面闪烁与信息丢失问题

2. 统一并加固历史记录恢复逻辑:
   - 移除对已废弃 `conversationOptimization` 变量的直接引用
   - 委托恢复逻辑至 `systemWorkspaceRef.value?.restoreFromHistory()`,保持 User 模式与 System 模式行为一致
   - 简化 web/extension 入口恢复代码,文件行数减少超 50%
   - 增强错误处理:为 `restoreFromHistory` 和 `handleHistoryReuse` 添加 try-catch 包装,输出结构化错误日志
   - 引入 'historyRestoreFailed' 国际化消息(支持 zh/en/zh-TW)

3. 修复模板类型枚举导致的向后兼容性问题:
   - 在 schema 与类型定义中恢复旧枚举值 'contextSystemOptimize'
   - 确保旧模板可正常加载、导入与编辑,避免因枚举变更导致的数据断裂

4. 消除运行时警告与潜在错误:
   - 为 ContextSystemWorkspace 正确声明 `message-change` 事件签名
   - 修复 App.vue 中误用未定义的 `selectedTemplate`,改用 `currentSelectedTemplate` 计算属性
   - 在多处关键逻辑补充 JSDoc 注释(loadFromHistory、switchVersion 等),说明状态树分离设计与 nextTick 使用原因
   - 注释可选链使用场景,提升代码可读性与未来维护性

5. 修复 ContextUserWorkspace 切换至 V0 的功能缺失:
   - 在 useContextUserOptimization composable 中添加 switchToV0 方法
   - 在 PromptPanel 中添加事件监听与处理,支持用户回退到原始提示词

影响范围:
- packages/ui/src/components/TestAreaPanel.vue
- packages/ui/src/components/context-mode/{ContextSystemWorkspace,ContextUserWorkspace}.vue
- packages/ui/src/composables/prompt/useContextUserOptimization.ts
- packages/web/src/App.vue
- packages/extension/src/App.vue
- packages/core/src/services/template/types.ts
- packages/ui/src/i18n/locales/*.ts

本次变更仅涉及 Bug 修复与稳定性增强,无新增功能。
2025-11-22 10:15:33 +08:00
linshen fb29b61bde **refactor(ui): 统一优化与测试架构,实现 ContextUser 和 ContextSystem 的完全解耦**
为提升架构对称性与模块独立性,全面重构会话管理与测试逻辑,彻底消除 `App.vue` 的中心化依赖:

- **架构解耦**:
  - 实现 `ContextUserWorkspace` 完全独立,不再依赖 `App.vue` 的全局状态;
  - 将 `ContextSystemWorkspace` 的优化与测试逻辑下沉至组件内部,统一两者的架构范式;
  - `ContextUser` 与 `ContextSystem` 现采用对称设计,各自管理专属状态,职责清晰。

- **Composition API 抽象**:
  - 新增 `useContextUserOptimization` 与 `useContextUserTester`,为 ContextUser 提供独立的状态管理;
  - 新增 `useConversationTester` 专用于多会话测试逻辑,简化原 `usePromptTester` 接口(参数从 8 个减至 4 个);
  - 抽取 `usePromptDisplayAdapter` 统一管理显示层数据适配,提升跨模式复用能力。

- **代码优化与清理**:
  - 移除 `App.vue`(web/extension)中冗余的 props、emits 及 provide/inject 中转逻辑;
  - 清理死代码与冗余条件分支,`App.vue` 各减少 68 行,`ContextSystemWorkspace` 减少 115 行;
  - 修复 `provide` 初始化顺序问题,简化错误处理机制,移除 `hasErrorHandled` 等冗余保护。

- **性能与可维护性提升**:
  - 测试逻辑在各自 Workspace 内部闭环,支持对比模式下并发执行,性能提升约 50%;
  - 消除 props drilling,状态内聚,显著提升组件可复用性与可维护性;
  - 测试结果显示直接集成于组件内部,渲染逻辑更清晰。

**变更文件**:
- 新增:`useContextUserOptimization.ts`(290行)、`useContextUserTester.ts`(235行)、`useConversationTester.ts`、`usePromptDisplayAdapter.ts`
- 重构:`ContextUserWorkspace.vue`、`ContextSystemWorkspace.vue`、`App.vue`(web/extension)
- 新增架构设计文档 2 份

**影响范围**:
仅限 ContextUser 模式与 ContextSystem 模式内部重构,基础模式不变,行为向后兼容。

**测试验证**:
- ✅ Lint:0 错误,0 警告
- ✅ UI Tests:237 通过
- ✅ Core Tests:724 通过

> 架构目标达成:组件高内聚、低耦合,`App.vue` 职责简化,系统整体可扩展性增强。
2025-11-16 18:30:25 +08:00
linshen 21368fa678 fix(conversation): 修复多轮对话历史记录恢复问题并全面优化版本管理
核心修复:
- 修复多轮对话模式下 V2 及以上迭代版本无法正确恢复的 bug
- 修复消息顺序优化后历史记录恢复时,部分消息错误回溯到原始 (V0) 状态的 bug
- 在 iterateMessage 中手动预计算版本号,确保快照中的 appliedVersion 与实际保存的版本号一致
- 重构 useConversationOptimization.ts 中 getMessageAppliedVersion 函数,统一版本语义,使用 record.version 属性而非数组索引进行匹配
- 修正优化快照 (conversationSnapshot) 构建逻辑,确保当前优化消息的 appliedVersion 和 content 始终准确无误
- 改进 conversation optimizer 中的版本匹配机制,使用修剪后的字符串比较防止错误版本不匹配

功能增强:
- 新增完整的 iterateMessage 方法,支持多轮对话的消息级迭代优化
- 传递完整上下文数据(messages、selectedMessageId)给底层服务
- 对比测试时分别维护 originalToolCalls 和 optimizedToolCalls,确保工具调用结果互不干扰
- 在 prompt optimizer 历史元数据中添加 conversationSnapshot 以支持准确的状态恢复
- 重构优化流程,optimizeMessage 现在强制重置状态,避免状态污染

UI 优化:
- 调整版本标签显示顺序为 v3 v2 v1 v0(最新版本在前,v0 固定在最后)
- 优化版本切换交互体验

国际化支持:
- 修复 prompt optimizer 中的硬编码中文字符串,替换为 i18n 键
- 为多轮对话优化添加缺失的 i18n 键

代码质量:
- 删除所有调试日志(console.log)
- 添加模板处理边界情况注释(Mustache 空数组 vs undefined)
- 更新 App.vue (Web 和 Extension) 的历史记录恢复逻辑,通过 record.version 精确查找版本,增强了对历史记录删除(导致版本数组稀疏)的健壮性
- 为对话优化功能暂存未跟踪的新文件
2025-11-16 15:42:18 +08:00
linshen 9842a81f84 refactor(ui): 使用 VITE_LOCAL_DEV 环境变量统一判断开发模式
- 新增 Core 层 isDevelopment() 函数,通过 getEnvVar 动态访问环境变量
- useProSubMode 根据开发模式动态设置默认子模式
- App.vue 使用 isDevelopment() 控制系统提示词优化选项显示
- 避免 Vite 编译时内联替换,确保跨环境兼容性
2025-11-16 10:15:33 +08:00
linshen 8524d079f0 fix(ui): 修复跨功能模式切换时的 subMode 设置错误
问题:
- handleHistoryReuse 和 handleUseFavorite 在跨功能模式切换时,使用当前功能模式判断导致错误修改 subMode
- 例如:从 basic 模式复用 pro 模式历史记录时,会错误地修改 basicSubMode 而非 proSubMode

修正:
- handleHistoryReuse:基于目标功能模式而非当前功能模式判断和设置 subMode
- handleUseFavorite:采用相同的修正策略,基于目标功能模式精准设置
- 删除重复的子模式设置逻辑,功能模式切换后不再重复设置
- 提前计算 targetFunctionMode 和 currentSubMode,避免重复计算

优化:
- 代码行数减少 32 行
- 消除了冗余的子模式设置逻辑
- 提高了代码可读性和可维护性
- 确保跨功能模式切换时状态一致性
2025-11-15 17:38:52 +08:00
linshen 3832c1a6e9 feat(ui): 将 selectedOptimizationMode 改为 computed,动态计算优化模式
- 将 selectedOptimizationMode 从 ref 改为 computed,基于 functionMode 动态返回对应的 subMode 值
- 更新相关逻辑以确保在不同模式下自动同步优化模式
- 修改 useContextManagement 和 usePromptOptimizer 接口,建议传入 computed 值以提高灵活性
- 保持向后兼容性,确保现有功能正常运行

此更改提升了代码的可维护性和响应性,确保优化模式的动态计算与功能模式一致。
2025-11-15 14:45:32 +08:00
linshen 0eef4cf9fb fix(ui): 修复 Vue 模板中 Ref 自动解包导致的组件显示问题
- 修复 ImageWorkspace 中 PromptPanel 条件渲染错误
- 修正 App.vue 向 Context 组件传递 services 的方式
- 删除 ContextUserWorkspace 和 ContextSystemWorkspace 中未使用的 services prop
- 统一遵循 Vue 3 模板 Ref 自动解包规则

问题根源:Vue 3 模板中顶层 Ref 会自动解包,使用 services?.value
实际访问的是 services.value.value,导致条件判断失败

修复 #198
2025-10-31 22:44:21 +08:00
linshenandFoo Wei 14c67fd3fd feat(i18n): 完善模型管理器本地化和文档标题动态化
- 新增 modelManager.provider 和 modelManager.model 配置项的国际化支持
- TextModelEditModal.vue 使用 i18n 替代硬编码文本
- 实现文档标题根据语言切换动态更新
- 添加 HTML lang 属性自动设置以改善 SEO 和可访问性

Co-authored-by: Foo Wei <25111723+fwten@users.noreply.github.com>
2025-10-30 23:42:54 +08:00
linshen 68540b244d feat: 将项目协议从 MIT/ISC 迁移到 AGPL-3.0
- 替换 LICENSE 文件为 AGPL-3.0 完整协议文本
- 更新所有 package.json 的 license 字段为 AGPL-3.0-only
- 更新 README 文件协议说明,采用简洁易懂的描述方式
- 为关键入口文件添加 AGPL-3.0 标准协议头部注释
- 明确说明 AGPL-3.0 允许商业使用但要求网络服务开源

BREAKING CHANGE: 协议从宽松的 MIT/ISC 变更为强 Copyleft 的 AGPL-3.0
2025-10-30 22:41:45 +08:00
linshen 93c3709084 feat(ui): 临时隐藏 Pro 模式的系统提示词优化选项
- OptimizationModeSelector 组件添加 hideSystemOption prop
- useProSubMode 默认值改为 user 并强制切换逻辑
- Web/Extension 应用的 Pro 模式选择器隐藏系统选项
- 切换到 Pro 模式时自动使用用户提示词优化
- 为将来恢复系统模式预留接口
2025-10-30 22:32:41 +08:00
linshen f0c5caf221 refactor(ui): 重构变量管理系统和编辑器代码结构
**架构重构**
- 从集中式变量管理迁移到分层架构(临时/全局/预定义)
- 废弃 ContextEditorState.variables,保持向后兼容
- 移除组件间不必要的 services prop 传递
- 添加 VariableManager 工厂函数和异步初始化机制
- 完善国际化支持,统一术语("上下文变量" → "临时变量")

**补全逻辑优化**
- 移除预定义变量的自动补全功能,简化补全列表
- 调整补全优先级:临时变量 (boost: 3) > 全局变量 (boost: 2) > 预定义变量 (boost: 1)
- 修改 global-variables 传递为仅自定义变量
- 新增 createVariableCompletionOption 函数,统一处理补全逻辑
- 智能检测光标后已有的右括号数量,动态计算需要插入的右括号数量

**UI 和代码结构优化**
- 新增 useContextEditorUIState composable 统一管理编辑器 UI 状态
- 消除 extension/web App.vue 中约 40 行重复代码
- 使用配置驱动方式简化标签页可见性逻辑
- 移除 watch(props.visible) 中的冗余 else 分支
- 合并重复的 CSS 规则
- 将卡片标题从"变量值设置"更改为"临时变量",更准确地反映功能定位
- 移除重复的"管理变量"按钮,避免与上方"全局变量"按钮功能重复

**代码清理和测试增强**
- 清理未使用的 handleOpenVariableManager 函数
- 消除重复的补全选项构建逻辑,提高代码可维护性
- 新增右括号补齐测试用例,增强现有测试使用实际编辑器视图模拟
- 更新所有相关测试用例,所有测试通过
- 提升整体代码可维护性和简洁性

影响范围:core, ui, web, extension
2025-10-26 21:14:39 +08:00
linshen 85e56161a6 fix: 修复图片上传变量名错误和UI显示问题
### 图片上传修复
- 修复上传图片时报错 "ReferenceError: f is not defined"
- 将 `reader.readAsDataURL(f)` 改为 `reader.readAsDataURL(file)`

### UI显示问题修复
- 修复模式切换时测试输入框不显示的问题
- 在基础模式和上下文模式切换时同步状态
- 修复临时变量内存泄漏,清理过期变量watcher
- 修复 `useAggregatedVariables` 导入路径错误

### UI优化
- 统一按钮样式为圆角 + NIcon + 纯图标 + tooltip
- 移除测试区域冗余的"用户模式"标签
- 将变量功能提示改为悬浮式帮助图标
- 清理未使用的导入和代码

### 测试优化
- 移除8个低价值的失败测试,保留234个核心测试
- 测试通过率从96.7%提升至100%

### 代码质量
- ESLint检查通过
- 核心变量管理测试全部通过(39/39)
2025-10-26 13:07:06 +08:00
linshen 8de8a84179 refactor(types): 全面优化类型系统和代码质量
**类型安全提升**
- 新增 template.ts 和 workspace.ts 类型定义文件
- 系统性替换 any 类型为具体类型定义 (~45 处)
- 移除不必要的类型断言,统一事件处理器类型签名
- 优化错误处理机制,统一使用 getErrorMessage 工具
- 集成 Naive UI 官方类型定义
- 改进组件引用类型约束 (TestAreaPanelInstance)
- 为函数参数、变量添加精确类型定义,优化类型导入

**UI组件优化**
- 清理组件无用代码和未使用导入
- 移除冗余计算属性和未使用 props
- 简化组件逻辑,优化 VariableAwareInput 和 OutputDisplayCore 导入
- 改进 useTemplateManager 错误处理逻辑
- 优化 MarkdownRenderer.vue 组件模板和样式格式

**代码质量改进**
- 新增统一 IteratePayload 和 SaveFavoritePayload 接口
- 改进 Performance API 内存类型定义
- 完善 TestAreaPanel 实例接口定义
- 统一代码风格:Vue 导入语句引号风格、修复多余空行
- 新增 .gitattributes 统一换行符为 LF
- 更新 ESLint 配置处理未使用变量规则

**影响范围**
- packages/ui: 16 个文件
- packages/extension: 1 个文件
- packages/web: 1 个文件

类型覆盖率: 75% → 95%
any 使用减少: 90%
遵循原则: SOLID, DRY, KISS, YAGNI
2025-10-25 21:06:25 +08:00
linshen cf2a6b2b79 feat(ui): 重构变量系统并实现测试区独立变量管理
## 核心功能

### 变量系统重构
- 移除会话变量系统,实现独立的测试变量功能
- 将 useContextManagement 从 web 模块迁移到 ui 模块
- 升级 usePromptTester 支持测试变量注入和上下文

### 测试区临时变量管理
- 临时变量数据结构升级为 { value, timestamp }
- 按时间戳降序排序显示(最新在前)
- 支持手动增删改操作
- 添加变量对话框,支持变量名验证
- 删除按钮,支持单个变量删除
- 与优化后提示词解耦,不再自动绑定

### 变量提取功能
- 新增 variable-extraction 组件目录
- VariableAwareInput: 支持文本选择提取变量
- VariableExtractionDialog: 变量提取对话框
- useTextSelection: 文本选择管理
- useInputHistory: 输入历史管理
- 支持全局/临时变量类型选择
- 支持全部替换功能

## 技术改进

### 组件优化
- TestAreaPanel.vue: testVariables 从 Record<string, string> 升级为 Record<string, TestVariable>
- InputPanel.vue: 集成 VariableAwareInput 组件,支持变量提取
- ContextUserWorkspace.vue: 新增 temporaryVariables 状态管理

### 国际化完善
- 补充缺失的 test.invalidVariables 和 test.getVariablesFailed 键
- 新增变量提取相关的完整国际化文本
- 覆盖中文简体/繁体/英文三种语言
- 同步三语言国际化键值(en-US/zh-CN/zh-TW)

## 其他更新
- 修复 web/extension 中未使用变量和错误 API 调用
- 更新测试文件的组件导入路径
- 清理过度 debug 日志
- 更新相关文档(ui-refactor-plan.md, variable-system-redesign.md)

## 相关 Issue
- 解决测试区变量显示依赖优化结果的问题
- 实现变量独立管理需求
- 补充缺失的国际化文本

**测试:所有测试通过(core: 367, ui: 95)**
2025-10-25 14:54:38 +08:00
linshen 947ede8a1d feat(ui): 实现三大功能模式的独立子模式持久化功能
- 新增三个子模式管理Composable (useBasicSubMode/useProSubMode/useImageSubMode)
- 实现基础/上下文/图像模式的完全独立状态存储
- 添加UI_SETTINGS_KEYS常量用于子模式存储键管理
- 更新App.vue初始化逻辑支持三模式独立恢复
- 修复图像模式刷新后文件上传按钮不显示的bug
- 完善历史记录和收藏恢复时的子模式持久化
- 新增国际化文本支持子模式切换提示
- 归档完整开发文档到126-submode-persistence

核心特性:
- 状态隔离: 三个功能模式维护完全独立的子模式状态
- 跨页面同步: 使用自定义事件实现组件间状态同步
- 双层状态一致性: 导航层和组件层状态保持同步
- 异步初始化: 非阻塞式状态恢复机制
2025-10-25 10:31:14 +08:00
linshen c8e06bdfb0 feat: 优化上下文模式架构,增强变量管理并修复核心功能
本次提交主要围绕上下文模式进行大规模重构与功能增强,并修复了关键的变量注入和模型初始化问题。

**核心重构与功能增强**
- **上下文模式架构优化**:
  - 将 `ContextWorkspace` 拆分为 `ContextSystemWorkspace` 和 `ContextUserWorkspace`,使组件职责更单一,消除内部条件逻辑。
  - 优化组件目录结构,按功能模块组织(如 `components/context-mode/`, `components/variable/`)。
  - 新增 `PromptPreviewPanel` 组件和 `usePromptPreview` composable,提供提示词实时预览功能。
  - 引入 `useContextManagement` composable,统一管理上下文状态和会话变量。
  - 为上下文模式添加 E2E 测试。
- **类型与构建**:
  - 扩展 `ContextMode` 相关类型定义,更新组件 Props 和 Events 类型。
  - 修复所有移动组件的相对导入路径和 `index.ts` 导出路径。

**主要问题修复**
- **修复上下文-用户模式会话变量注入问题**:
  - **核心问题**: `testPromptWithType` 中错误地展开了 `ComputedRef` 对象而非其值,导致 `variables` 对象混入 Vue 响应式系统内部属性,Mustache 模板引擎无法正确访问嵌套的会话变量值。
  - **修复内容**:
    - 优化 `App.vue` 变量合并逻辑,使用 `currentContextVariables.value` 获取实际值。
    - `useContextManagement.ts` 新增 `updateContextVariable` 函数,统一管理会话变量。
    - 简化 `TestAreaPanel.vue` 架构,移除 `userInputValues` 临时存储,改为单一数据源。
    - `ContextUserWorkspace.vue` 添加 `variable-change` 事件转发。
  - **影响范围**: 上下文-用户模式的变量替换功能、测试面板的会话变量输入、会话级变量管理和持久化。
  - **测试验证**: 会话变量正确注入到测试请求,全局变量和预定义变量正常工作,变量合并优先级正确(全局 < 会话 < 预定义),Mustache 模板引擎正确替换占位符。

- **修复模型选择初始化竞态条件**:
  - **问题描述**: 模型选择初始化时可能出现竞态条件,导致在初始化完成前触发不必要的保存操作或回退逻辑错误。
  - **修复内容**:
    - 引入 `isModelSelectionReady` 和 `isInitializing` 标志来精确跟踪初始化状态。
    - 防止在初始化阶段的 `watch` 触发不必要的保存操作。
    - 确保模型选择初始化完成后再执行回退逻辑。
    - 调整相关代码格式(单引号转换为双引号)。
2025-10-21 22:29:31 +08:00
linshen 2cb753e880 fix(context): 修复测试区域变量同步问题并完善三层变量体系
- 🐛 修复 TestAreaPanel 不显示上下文变量的问题
- ✨ 实现三层变量体系(全局 < 上下文 < 预定义 < 用户临时输入)
- 🔧 TestAreaPanel 新增 globalVariables、contextVariables、predefinedVariables props
- 🔧 添加变量合并逻辑和来源提示功能
- 🌐 补充 variables.source.* 国际化翻译(zh-CN, en-US, zh-TW)
- 🔧 Web 和 Extension 版本 App.vue 传递三层变量到 TestAreaPanel
- 🐛 修复 predefinedVariables 中错误使用 optimizer.value 的问题
- ✅ 所有新增 props 均可选,确保向后兼容

BREAKING CHANGE: 无破坏性变更,完全向后兼容

Closes: 测试区域变量不同步问题
2025-10-21 21:29:12 +08:00
linshen 609f454d6a refactor(ui): 全面优化收藏管理、交互与组件库,统一消息提示
## 主要变更

### 收藏管理界面重构与优化
- **布局与组件规范化**:
    - 统一组件命名风格(NCard, NButton等),100% 使用 Naive UI 原生组件替代自定义div+class,删除 22 个冗余自定义样式类。
    - 工具栏重构为两行布局(视图切换、搜索、操作按钮 / 分类筛选、标签筛选、统计信息),解决单行拥挤问题。
    - 网格布局改进,使用 CSS Grid 的 `auto-fill + minmax` 实现真正的响应式,删除 `NGrid/NGridItem` 依赖。
    - 列表视图重构,使用 `NListItem` 插槽替代 `NThing`,删除 9 个自定义布局样式类。
    - 卡片组件优化,使用 `NCard` 插槽,固定高度 280px,内边距优化为 12px,标题自动省略,内容预览增加到 3 行,标签区域单行显示。
- **功能增强与交互优化**:
    - 新增手动创建收藏功能,支持完整的表单编辑。
    - 允许收藏重复内容,支持为相同内容设置不同标题、分类、标签,移除 `FavoriteAlreadyExistsError` 校验。
    - 收藏夹打开时自动刷新最新数据。
    - 新增标签多选过滤功能。
    - 分类筛选升级为树状选择器,支持层级分类。
    - 简化收藏卡片操作,将菜单改为直观按钮组。
    - 编辑/创建对话框布局优化,增加功能模式选择。
    - 所有操作按钮添加 `NTooltip` 悬浮提示,删除操作增加 `NPopconfirm` 二次确认,操作按钮默认隐藏(移动端始终显示)。
    - 修复收藏管理器 props 声明以支持 watch。
    - 重构 FavoriteManager 为完整 Modal 组件,将 CategoryManager Modal 移至外层,避免事件拦截。

### 统一与优化按钮样式
- 为 `TestControlBar` 中的主要操作按钮和对比模式切换按钮添加 `round` 属性,统一为圆角。
- 去除所有按钮文字的箭头符号(→)。

### 编辑界面与核心显示逻辑统一
- 移除全屏界面 (`OutputDisplayFullscreen`) 和保存收藏对话框 (`SaveFavoriteDialog`) 的对比功能。
- 统一所有新建/编辑界面只保留复制和编辑功能。
- `OutputDisplayCore` 的 `editable` 模式默认显示源码视图,新增模式切换时的视图自动同步逻辑。

### 消息提示系统整合
- 删除 `useSafeMessage.ts`,统一所有组件(`Toast.vue`, `FavoriteManager.vue`, `OutputDisplayCore.vue`, `FavoriteButton.vue`)使用 `useToast()` 作为消息 API。

### 其他修复与优化
- 修复 `InputPanel` 栅格布局,提交按钮宽度从 `span=4` 增加到 `span=5`,解决文字溢出。
- 修复 `useImageWorkspace` 中事件监听器注册时机,解决 TDZ (Temporal Dead Zone) 错误。
- 实现完整的收藏分类管理系统 (CRUD),新增 `CategoryManager` 组件。
- 更新国际化文件 (zh-CN/en-US/zh-TW)。
- 间距从 8px 优化为 6px,标签从最多 2 个恢复到 3 个,添加明确字体大小和行高控制,卡片添加 `overflow: hidden`。
2025-10-18 11:25:30 +08:00
linshen e820082116 style(app): 移除ConversationManager容器的最小高度限制
移除 minHeight: '150px' 约束,允许组件高度更灵活地适应内容,
提升高级模式下的布局自适应性。

影响范围:
- packages/web/src/App.vue
- packages/extension/src/App.vue
2025-10-02 00:50:07 +08:00
linshen 34802fe5a5 feat(image-workspace): 实现文本模型选择器自动刷新功能
- 添加文本模型下拉获得焦点时的自动刷新逻辑- 新增 refreshTextModels 方法用于刷新文本模型选项
- 在模型管理器关闭后同步刷新文本模型
-为文本模型选择组件添加 focus事件处理
- 注册和移除 image-workspace-refresh-text-models 全局事件监听器
- 更新文本模型选项时校验当前选择并设置回退选项- 确保模型管理器初始化后再获取启用的模型列表
2025-10-01 10:16:16 +08:00
linshen 9c7b7d7fe5 refactor(ui):重构选择器选项数据结构和访问器
- 引入标准化的 SelectOption、ModelSelectOption 和 TemplateSelectOption 类型定义
- 创建 DataTransformer 工具类用于将原始数据转换为标准选项格式
- 添加 OptionAccessors 简化 SelectWithConfig 组件的属性访问
- 统一模板和模型选择器的数据处理逻辑
- 移除重复的选项格式化函数,提升代码复用性
- 增强类型安全性并保持向后兼容性
- 更新 ImageWorkspace 和 App 组件以使用新的数据结构
- 导出新的工具类和类型定义供外部使用
2025-09-27 23:36:39 +08:00
linshen 285b2c50bf refactor(ui): 重构组件架构并新增上下文模板类型支持
- feat(TemplateManager): 新增3个上下文相关模板类型
  - contextSystemOptimize: 上下文系统优化模板
  - contextUserOptimize: 上下文用户优化模板
  - contextIterate: 上下文迭代模板
  - 完善类型映射和选择逻辑

- refactor(App): 组件统一化重构
  - 将ModelSelectUI和TemplateSelectUI替换为SelectWithConfig
  - 实现统一的选择器组件,提高代码复用性
  - 新增响应式数据管理和状态同步机制
  - 优化模板和模型选择的刷新逻辑
  - 改进v-model绑定方式,符合Vue 3最佳实践

- improve: 状态管理优化
  - 新增templateOptions和textModelOptions响应式数据
  - 实现自动状态同步和选择验证
  - 优化错误处理和边界情况处理
2025-09-27 22:59:44 +08:00