Skip to content

feat: 1.2.8-max — 原生 UI 重写、Skill Hub、执行权限与提示词优化 - #24

Merged
LangLang03 merged 10 commits into
masterfrom
dev
Sep 5, 2026
Merged

feat: 1.2.8-max — 原生 UI 重写、Skill Hub、执行权限与提示词优化#24
LangLang03 merged 10 commits into
masterfrom
dev

Conversation

@LangLang03

Copy link
Copy Markdown
Owner

Summary

将 LineCode Pro 更新到 1.2.8-maxversionCode = 32,重写聊天与设置界面,完整接入 Skill Hub,并修复自动权限重复确认、错误重试重复生成处理块、处理计时不停止和上下文反复压缩的问题。

聊天中的工具过程改为按回合组织、连续调用默认折叠,最终答复独立展示;提示词将固定规则与动态状态分开,避免待办、记忆和附件变化反复改写请求前缀。

本 PR 为 devmaster。仓库默认主分支名称为 master。已整合主分支现有的思考摘要与工作状态功能,并解决 AssistantMessageView 的冲突,保留新版紧凑布局和长按消息操作。

Type of change

  • Bug fix — 布局、执行权限、错误重试、处理计时、压缩循环修复
  • New feature — Skill Hub、永久命令授权、处理时间线
  • Refactor / code quality — 共享 UI 组件、提示词组装、确定性序列化、资源注入
  • Breaking change — 未引入数据库 schema 迁移或要求用户重建已有配置
  • Docs / changelog only — 本 PR 同时包含功能代码及详细版本日志

Scope

范围 主要内容
聊天 UI 消息气泡、输入框、导航、思考、处理时间线、工具和文件差异
设置与扩展 主题、模型、工作区抽屉、工具与执行、存储、Skills 商店
执行与会话 自动 / 确认 / 只读权限、永久授权、错误日志、重试与耗时持久化
模型与上下文 稳定系统前缀、动态上下文、附件归属、工具排序、JSON、压缩循环
Skill Hub 浏览、搜索、详情、安装、登录、社区互动和发布
工程与版本 Java 原生 View、Robolectric、国际化、1.2.8-maxupdate.md

Changes

1. 聊天导航、输入与原生布局

  • 用户消息改为右对齐气泡,区别于助手正文和过程说明;收紧输入框默认高度、消息到屏幕边缘的距离和底部留白。
  • 保留左上角三条杠菜单、工作区选择、权限选择器和三点菜单;新对话使用加号,附件加号仍负责文件选择。
  • ScreenHeaderView 统一返回与图标操作的 48dp 点击区域、22dp 图标,修复错误日志和模型页面右上角按钮过大、保存按钮贴边的问题。
  • 新增 ScreenSurfaceViewInsetSheetLayoutAdaptiveActionsView 等共享布局,限制宽屏内容宽度、底部弹窗高度,并适配窄屏按钮排列。
  • 调整 Markdown 正文、标题、代码块的字号与间距,保留复制、链接和代码换行操作。
  • 兼容主分支的 WorkingStatusView 和思考摘要强调样式:等待正文时仍有工作状态,完成后隐藏;消息操作栏维持默认隐藏、长按展开,不因刷新重新展开。

2. 按回合组织处理、思考、工具与重试

  • ConversationTimeline / AssistantTurnView 将一轮助手的过程文字、思考和工具调用组织到同一个「处理中 / 已处理」区域,最终答复显示在外部。
  • 中途没有正文输出的连续工具调用合并为工具组并默认收起,手动展开查看各次调用;出现正文时划分新的过程段,保持原有顺序。
  • 每次思考是独立组件;连续工具执行的内部推理随工具过程收纳,避免将全部思考合并到顶部。
  • Agent 与 Agent 流水线使用各自专用卡片直接展示,保留进度、内部输出和展开操作。
  • 内部 <LEOF "完成了任务重写"> 标记负责结束处理阶段;隐藏未完整标记,完整解析后冻结处理计时并展示后续正式答复。
  • ProcessingDuration 支持秒、分钟、小时;起止时间随消息保存,完成、停止生成或重新打开已结束会话后不继续累加。
  • 中途错误和重试留在同一处理区域,重试说明排除在模型上下文外;已结束生成的过期重试回调不会继续执行。
场景 更新后行为
普通无工具文本答复 不生成多余的已处理块
连续读取、执行命令,中间无正文 合并成可手动展开的工具组
工具返回后输出正文,再次调用工具 按真实顺序追加正文、思考与下一组工具
执行中出现错误并重试 仍属于同一个处理区域,错误保留在对应结果内部
处理结束或用户停止 耗时停止增长,并随会话保存

3. 工具卡片、文件差异与授权

  • 成功读取文件使用轻量结果行,不再点击展开原始读取内容;失败读取仍可在调用内部查看错误。
  • Shell / MCP 结果使用摘要和有界输出区,长内容不直接撑高整个聊天列表。
  • 重写文件编辑与差异展示,按文件名、增删统计、行号和代码组织;新增 DiffLines,修正列表缩进、代码对齐和增删底色。
  • 答复后汇总编辑文件及增删数量,保留审阅、撤销和文件列表操作,并独立维护汇总与过程中的展开状态。
  • ToolApprovalView 将执行说明、命令和拒绝 / 允许一次 / 永久允许集中到输入区附近,支持窄屏排列。
  • CommandPermissionRepository 按执行范围、工具名、完整 Shell 命令、工作目录生成 SHA-256 授权键;复用授权要求精确匹配,不保存明文命令作为授权记录。
  • 自动权限下,已启用工具在主流程和 Agent 内部直接执行;确认模式继续申请,只读限制与工具启用状态继续生效。
  • 等待确认期间切换执行范围时拒绝旧范围申请;权限提示词同步告诉模型由应用处理执行授权。
  • 未知工具、失败结果与异常均进入错误日志;错误信息内联到调用结果,日志文件使用独立名称并保护时间格式化器,避免并发覆盖。

4. 设置、主题、模型与抽屉细节

  • 设置主页、主题、思考深度、模型列表、侧边栏设置组和扩展入口增加背景层级、边界或间距,调整内置主题卡片与应用背景的对比。
  • 自定义主题保留完整颜色编辑布局,补齐保存按钮右侧留白。
  • 缩小模型入口图标,增加预设提供商间距;模型选择短列表按内容收缩,长列表限制高度,长按菜单去除多余底部留白。
  • 工作区选中背景铺满抽屉内容宽度,保留选择和长按删除;目录确认操作留在面板内。
  • 工具与执行页收紧边距、强化执行目标选择状态,保留工具分组开关,移除展示内部工具 ID 的折叠项。
  • 修复存储页刷新图标无尺寸约束导致内容被挤掉的问题,恢复总占用与四类统计卡片。
  • Skills 商店标题与返回箭头同排,内容左右统一 16dp;扩展入口间隔为 12dp。
  • 终端提供者新增 TerminalTheme,统一服务操作、日志区与浅色 / 深色显示。

5. Skill Hub 完整接入

  • 商店支持搜索、分页,以及按下载、收藏、更新排序。
  • 详情包含概览、文件、评论、版本、评测、预览,展示作者、说明、脚本 / API Key 需求和服务端安全信息。
  • 支持应用内阅读 SKILL.md、文本文件预览,以及可选 0.5~1.6 倍双指文字缩放。
  • 按技能版本下载 ZIP,接入现有安装位置选择和安装后刷新;URI、GitHub、Skill Hub 共用临时安装与清理逻辑。
  • 官方页面登录由内置 WebView 承载;原生详情支持收藏、评论、回复、点赞和删除评论,并处理会话失效。
  • 本地 Skill 可填写标识、名称和版本后使用 multipart 发布;校验文件范围、数量和大小,发现敏感文件时拒绝发布。
  • HTTP 客户端新增 bodyBytes,按原始字节写入上传请求,支持二进制文件。
  • Skill Hub 页面及服务文案迁入资源,补齐英文、中文、俄语各 258 条相关字符串;通过 ContextResourceProvider 注入资源访问。

6. 提示词稳定前缀与上下文修复

  • 固定规则、模型身份、工具和扩展说明组成系统前缀;当前记忆、检索历史、待办和工具限制作为应用上下文放到请求末尾。
  • 附件路径跟随所属用户消息,不再聚合到系统提示词;新增附件保留前面回合的内容和原生图片输入 JSON。
  • 系统提示、动态上下文和附件均计入预留 Token。次数耗尽时仍移除原生工具并说明当前限制。
  • 原生工具、文本工具分组及扩展提示固定排序;StableJson 递归排序对象键,保留数组顺序和内容语义。
  • StringTemplate 单次扫描替换占位符,插入文本中的模板片段保持字面内容,结果不再取决于 Map 遍历顺序。
  • 工作区、权限、自定义模板和学习模式变更仍即时生效;关闭学习模式时仍可提供手动记忆。
  • 压缩摘要成功后重置旧 usage 基线,避免将完整原对话的 Token 用量当作压缩后占用;保留用户消息顺序,只排除已被摘要替代的基础消息。

7. 版本、日志与构建配置

  • releaseVersionName1.2.8-maxversionCode3132
  • Release 导出名:LineCode Pro 1.2.8-max.APK
  • update.md 按现有格式补充自 v1.2.6 以来的详细更新,包含此前两个 1.2.7 RC 阶段,并补充主分支兼容结果。
  • 引入 Robolectric 4.16 与原生资源测试配置,.gitignore 排除 /temp/;本地预览和构建产物不作为 PR 附件提交。

Testing

  • ./gradlew :app:testDebugUnitTest passes
  • ./gradlew :app:lintDebug passes(无错误,仍有警告)
  • ./gradlew :app:assembleDebug builds
  • ./gradlew :app:assembleDebugUserCert builds
  • Manual verification on device/emulator — 尚未完成真机 / 模拟器手动验证

在包含主分支兼容改动的代码上,528 项单元测试通过,0 失败、0 错误、0 跳过

模块 通过数
app 382
feature-model 40
feature-tool 62
tool-ui 37
ui-theme 7

执行命令:

./gradlew :app:testDebugUnitTest :feature-model:testDebugUnitTest \
  :feature-tool:testDebugUnitTest :tool-ui:testDebugUnitTest \
  :ui-theme:testDebugUnitTest :app:lintDebug \
  :app:assembleDebug :app:assembleDebugUserCert

终端提供者此前还通过了 :terminal-provider:assembleDebug:terminal-provider:lintDebug。使用 aapt dump badging 核对过 APK 的 versionName=1.2.8-maxversionCode=32

关键覆盖包括:

  • 原生布局、窄屏 / 大字体 / 宽屏、抽屉与按钮可达性、表单草稿和导航回调。
  • 连续工具折叠、思考顺序、Agent 卡片、重试合并、停止计时及会话恢复。
  • 自动 / 确认 / 只读权限、精确命令授权、执行范围变化和 Agent 内部授权。
  • 记忆 / 待办 / 附件变化后的请求前缀、工具上限、排序与序列化。
  • Skill Hub 数据解析、会话参数及安装控制器、压缩循环回归。
  • 新增原生兼容回归:等待正文及思考时工作状态可见,完成后隐藏,长按消息操作保持紧凑且刷新不丢失展开状态。

已查看 Robolectric Native Graphics 生成的工作区选中背景、模型长按菜单、存储管理、扩展间距、执行设置和 Skills 商店截图。该验证不等同于真机键盘、WebView 登录或在线服务联调,也未测量真实模型服务端的缓存命中率。

Compliance checklist

  • Java only in app/src/main/java,未新增 Kotlin 源文件
  • UI built in Java code,未新增 XML 布局页面
  • 永久授权仅保存摘要键;工具错误继续使用现有 ErrorLogRedactor 脱敏,未新增明文凭据导出字段
  • 聊天状态继续经 ChatUiStateAssemblerChatUiStateMainContract.View.render(...) 渲染,授权状态使用不可变 UI 状态传递
  • update.md 已记录用户可见变更和版本信息

Risk / rollback

  • 本次涉及聊天时间线、权限和多页面布局,发布前建议重点检查:真实设备键盘与系统栏、长对话折叠和停止生成、SSH / 终端提供者授权,以及 Skill Hub 登录和安装。相关原生及逻辑回归已通过,线上服务的完整交互尚未手动验证。
  • 已保留主分支 feat: support streamed reasoning summaries and working status #22 的思考摘要、普通推理内容和工作状态实现;冲突处采用新版默认隐藏的消息操作栏,并补充兼容测试。
  • 合并到 master 后,版本号增加会满足仓库既有 Release APK 工作流的发布条件;签名构建、tag 和 Release 由该工作流处理。本 PR 本身不执行合并或发布。
  • 如需撤回,使用 GitHub Revert 或撤销 PR 合并提交;若版本已分发,回滚代码应通过更高的 versionCode 发布修正版,不降低已发布应用的版本号。已有配置和会话数据无需删除。

andTDWF and others added 10 commits August 11, 2026 16:37
新增 Skill Hub 登录、浏览、详情与发布流程,并扩展技能仓库和 HTTP 客户端以支持远程技能管理。
让 URI、GitHub 和 Skill Hub 安装共用临时文件清理与既有 Skill 安装逻辑,并将二进制文件写入收口到 SkillFileManager。
- Skill Hub 相关 UI 组件中全部硬编码中文字符串替换为 R.string 资源
  (SkillHubCenterScreenView / LoginScreenView / PublishScreenView /
  WebScreenView / SkillStoreScreenView / SkillStoreDetailScreenView /
  SkillIconLoader 等)
- Skill Hub Service 层(SkillHubClient / SkillHubSessionClient)注入
  ResourceProvider,通过资源文件读取异常消息,不再硬编码中文
- 新增 ContextResourceProvider 作为 Context→ResourceProvider 的桥接,
  UI 层构造后注入给数据层,避免数据层直接持有 Context(DIP)
- 同步修复其他 UI 组件中的遗漏硬编码:
  ComposerView / SshSettingsScreenView / ExtensionDetailScreenView /
  ModelListScreenView
- 补齐 values/strings.xml 与 values-zh/strings.xml 中 258 条 Skill Hub
  相关字符串资源
- 修复 ExtensionManagementControllerTest 因构造函数与 Host 接口
  变更导致的编译错误

验证:
- ./gradlew :app:compileDebugJavaWithJavac BUILD SUCCESSFUL
- ./gradlew :app:testDebugUnitTest (含 SkillHubClientTest、
  SkillHubSessionClientTest、ExtensionManagementControllerTest)
  BUILD SUCCESSFUL
- 添加 258 条 Skill Hub 相关字符串的俄语翻译
- 覆盖错误消息、UI 标签、表单字段等所有用户可见文本
- 完成完整的国际化支持(英文、中文、俄语)
fix: 修复上下文压缩循环问题
1. 调整压缩逻辑,仅标记baseIds消息为excludeFromContext,保留retained消息
2. 压缩成功后重置tokenUsageTracker,避免使用全量transcript的usage作为基线
3. 新增测试用例验证压缩后不会误触发压缩循环
Rework conversation, tool approval, reasoning and retry displays; restore workspace selection and refine native screen layouts, card spacing and header actions.

Keep request rules and tool schemas deterministic, append runtime context after history, and retain attachments with their user turns. Ignore temporary UI previews and add native layout and prompt regression coverage.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @LangLang03, your pull request is larger than the review limit of 150,000 diff characters

@LangLang03
LangLang03 merged commit 2b1fa09 into master Sep 5, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants