first commit
This commit is contained in:
38
apps/web/src/content/about.test.ts
Normal file
38
apps/web/src/content/about.test.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
ABOUT_BRAND,
|
||||
ABOUT_HOME_ITEMS,
|
||||
buildAboutInfoRows,
|
||||
getAboutDetailContent,
|
||||
isAboutDetailKey
|
||||
} from "./about";
|
||||
|
||||
describe("about content", () => {
|
||||
it("首页入口与小程序结构一致", () => {
|
||||
expect(ABOUT_HOME_ITEMS.map((item) => item.key)).toEqual([
|
||||
"manual",
|
||||
"feedback",
|
||||
"privacy",
|
||||
"changelog",
|
||||
"app"
|
||||
]);
|
||||
});
|
||||
|
||||
it("可识别合法详情 key", () => {
|
||||
expect(isAboutDetailKey("manual")).toBe(true);
|
||||
expect(isAboutDetailKey("unknown")).toBe(false);
|
||||
});
|
||||
|
||||
it("非法 key 会回退到关于详情", () => {
|
||||
expect(getAboutDetailContent("unknown").title).toBe("关于");
|
||||
});
|
||||
|
||||
it("产品信息可拆成标签和值", () => {
|
||||
const rows = buildAboutInfoRows(getAboutDetailContent("app"));
|
||||
expect(rows[0]).toEqual({
|
||||
key: "row-0",
|
||||
label: "产品名称:",
|
||||
value: ABOUT_BRAND.productName
|
||||
});
|
||||
});
|
||||
});
|
||||
497
apps/web/src/content/about.ts
Normal file
497
apps/web/src/content/about.ts
Normal file
@@ -0,0 +1,497 @@
|
||||
export type AboutDetailKey = "manual" | "feedback" | "privacy" | "changelog" | "app";
|
||||
|
||||
export type AboutSection = {
|
||||
title: string;
|
||||
paragraphs?: string[];
|
||||
bullets?: string[];
|
||||
actionLabel?: string;
|
||||
};
|
||||
|
||||
export type AboutDetailContent = {
|
||||
title: string;
|
||||
lead: string;
|
||||
sections: AboutSection[];
|
||||
};
|
||||
|
||||
export type AboutHomeItem = {
|
||||
key: AboutDetailKey;
|
||||
title: string;
|
||||
subtitle: string;
|
||||
};
|
||||
|
||||
export type AboutInfoRow = {
|
||||
key: string;
|
||||
label: string;
|
||||
value: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* Web 端先对齐小程序关于页文案。
|
||||
* 这里保留独立 TS 副本,避免把小程序 CommonJS 运行时直接耦合进 Web 构建链。
|
||||
*/
|
||||
export const ABOUT_BRAND = {
|
||||
productName: "RemoteConn",
|
||||
chineseName: "AI矩连",
|
||||
platformLabel: "AI矩连小程序版",
|
||||
version: "v3.0.0",
|
||||
updatedAt: "2026-03-18",
|
||||
updatedAtCompact: "20260318",
|
||||
feedbackEmail: "douboer@gmail.com",
|
||||
summary: "管理服务器并在移动端执行 AI 终端操作。"
|
||||
} as const;
|
||||
|
||||
export const ABOUT_HOME_ITEMS: AboutHomeItem[] = [
|
||||
{
|
||||
key: "manual",
|
||||
title: "使用手册",
|
||||
subtitle: "查看各模块的实际操作说明与推荐使用顺序"
|
||||
},
|
||||
{
|
||||
key: "feedback",
|
||||
title: "问题反馈",
|
||||
subtitle: "查看反馈方式与建议附带的信息"
|
||||
},
|
||||
{
|
||||
key: "privacy",
|
||||
title: "隐私政策",
|
||||
subtitle: "查看信息收集、使用与存储说明"
|
||||
},
|
||||
{
|
||||
key: "changelog",
|
||||
title: "变更记录",
|
||||
subtitle: "查看完整版本历史与当前遗留问题"
|
||||
},
|
||||
{
|
||||
key: "app",
|
||||
title: "关于",
|
||||
subtitle: "查看产品简介、版本信息与联系信息"
|
||||
}
|
||||
];
|
||||
|
||||
const ABOUT_DETAIL_CONTENT: Record<AboutDetailKey, AboutDetailContent> = {
|
||||
manual: {
|
||||
title: "使用手册",
|
||||
lead: "本手册按当前小程序页面结构说明实际操作路径。建议按照“服务器列表 -> 服务器配置 -> 终端 -> 闪念 / 日志 -> 设置 / 插件”的顺序使用,先完成一台服务器配置,再逐步扩展到 AI、语音和插件能力。",
|
||||
sections: [
|
||||
{
|
||||
title: "1. 服务器列表:新增、整理和进入连接",
|
||||
bullets: [
|
||||
"打开首页“服务器”,左上角第一个按钮用于新增服务器,第二个按钮删除已勾选服务器,第三个按钮全选或取消全选。",
|
||||
"顶部搜索框会按名称、主机、用户名、端口和标签过滤服务器;搜索状态下建议先清空关键词再调整顺序。",
|
||||
"点击服务器卡片主体会进入“服务器配置”;长按卡片可拖动排序,便于把常用服务器放到前面。",
|
||||
"每张卡片右侧有三个快捷按钮:复制、AI、连接。复制会生成一份同配置的新服务器;AI 会直接进入终端并自动打开 AI 面板;连接会进入该服务器终端。",
|
||||
"连接中的服务器会在列表中高亮显示;如果该服务器已有可复用会话,再次点击“连接”会直接回到当前终端,而不是重新创建一条会话。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "2. 服务器配置:把一台服务器配到可连接状态",
|
||||
bullets: [
|
||||
"基础信息至少填写名称、主机、端口和用户名;“标签”支持逗号分隔,保存后会显示在服务器卡片底部,便于按环境或项目区分。",
|
||||
"认证信息按实际方式填写:密码模式填写密码;私钥模式填写私钥和口令;证书模式再补证书内容。认证方式切换后,请确认对应字段已经完整填写。",
|
||||
"连接参数里的“AI 工作目录”决定 AI 快速启动时进入的目录。可以手输,也可以点“选择目录”打开远程目录树,展开目录后点“应用”写回表单。",
|
||||
"如需跳板机,打开“跳转主机”开关,再分别填写跳板机主机、端口、用户名和独立认证信息;该配置会用于目录选择和终端连接的整条链路。",
|
||||
"底部按钮从左到右分别是返回、连接、保存、闪念、关于。建议先点“保存”,确认无误后再点“连接”;如果只是临时修改配置未保存,直接连接前页面也会先尝试落库。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "3. 终端:输入、重连、清屏和 AI 快速启动",
|
||||
bullets: [
|
||||
"进入终端后,顶部会显示服务器名、连接状态和延迟。右侧开关在已连接时用于断开,在断开后用于重连;左上角按钮分别是打开 AI 面板和清屏;当 Codex 正在当前会话前台运行时,清屏按钮会禁用。",
|
||||
"点击终端输出区域会激活输入焦点并弹出系统键盘;输入框使用原生键盘代理,回车会把当前内容发送到远端终端。",
|
||||
"右下角键盘按钮可展开触摸工具区,里面提供方向键、Enter、Paste 和常用快捷键,适合在手机上执行命令行导航、补全和翻页操作。",
|
||||
"“Paste”会读取系统剪贴板并发送到当前会话;如果未连接或剪贴板为空,页面会直接提示,不会静默失败。",
|
||||
"点击左上角 Codex 图标可打开“AI 快速启动”面板。这里可以直接执行 `codex --sandbox ...` 或 copilot 命令;前提是服务器配置里的 AI 工作目录存在,且远端已安装对应命令。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "4. 语音与闪念:先记录,再决定发送还是存档",
|
||||
bullets: [
|
||||
"终端右下角悬浮麦克风可拖动位置;点开后会出现语音输入面板,文本框里会显示当前草稿内容。",
|
||||
"按住主语音按钮开始录音,松开后把识别结果写入草稿;下方分类胶囊可以选择本次闪念记录要归入的分类。",
|
||||
"录音完成后,中间的“记录”按钮会把草稿保存到闪念列表;“发送”按钮会把草稿直接发送到终端执行;右侧两个按钮分别用于清空草稿和关闭面板。",
|
||||
"如果你暂时不想把内容发到服务器,优先使用“记录”而不是“发送”;这样可以先在闪念页整理,再决定是否执行。",
|
||||
"未连接终端时仍可记录闪念,但不能发送到会话;适合先记操作思路、排查步骤和待执行命令。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "5. 日志:看连接过程,导出排查信息",
|
||||
bullets: [
|
||||
"日志页按时间倒序展示连接相关记录,每条会显示服务器标识、状态、开始结束时间和摘要。",
|
||||
"顶部“导出脱敏日志”会把当前全部日志整理成文本并复制到剪贴板,适合发给开发者做排查;这里导出的是脱敏后的摘要,不是原始敏感凭据。",
|
||||
"日志页默认每页 15 条,可用“上一页 / 下一页”翻页;如果列表为空,说明当前设备上还没有产生连接日志或日志已被清理。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "6. 闪念:搜索、改分类、编辑和导出",
|
||||
bullets: [
|
||||
"闪念页顶部输入框用于全文搜索;右侧下拉按钮可以按分类过滤,方便只看某一类记录。",
|
||||
"每条记录左滑后可直接“复制”或“删除”;适合快速把某条命令、报错或笔记重新贴回终端或外部沟通工具。",
|
||||
"点击分类标签会弹出快速改分类面板,可把记录移动到其他分类;点击记录卡片主体会打开编辑弹层,支持修改正文和分类。",
|
||||
"底部“导出闪念”会把当前闪念内容复制到剪贴板;如果你需要先做归档,再批量整理,这是最直接的导出方式。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "7. 设置:统一调整外观、连接默认值和分类规则",
|
||||
bullets: [
|
||||
"设置页分为“界面 / 终端 / 连接 / 记录”四个标签。界面标签调整应用主题、背景色、文本色和按钮色;终端标签调整终端配色、字体、字号、行高以及宽字符支持。",
|
||||
"如果终端显示密度不合适,可在“终端”标签调整字号和行高;当前版本修改字号后仍建议断开重连一次,避免出现显示未完全刷新。",
|
||||
"“连接”标签用于设置 SSH 非主动断开后的自动重连、重连次数上限、后台保活时长,以及默认认证方式、默认端口、默认项目路径、默认超时和心跳。",
|
||||
"“记录”标签除了设置记录保留天数,还可以新增闪念分类、设默认分类、删除分类,并通过长按拖动调整分类顺序。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "8. 插件与常见使用顺序",
|
||||
bullets: [
|
||||
"插件页支持粘贴 JSON 导入插件、导出全部插件、启用 / 禁用 / 重载 / 移除插件,并在会话连接后执行插件注册的命令。",
|
||||
"如果插件页里没有可执行命令,通常表示当前没有连接中的会话,或插件本身没有注册任何命令;先回终端建立连接,再回插件页刷新。",
|
||||
"推荐的新用户使用顺序是:先在“服务器”新增一台机器,进入“服务器配置”填完连接信息,保存并连接;连接稳定后,再尝试语音、闪念、AI 和插件能力。",
|
||||
"请仅连接你拥有合法权限的服务器;若出现连接失败、目录加载失败、AI 启动失败或显示异常,先查看日志和闪念记录,再把版本号、复现步骤、截图与日志摘要一并反馈。"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
feedback: {
|
||||
title: "问题反馈",
|
||||
lead: "如果你在使用过程中遇到问题或有改进建议,可通过邮箱反馈联系我们。",
|
||||
sections: [
|
||||
{
|
||||
title: "反馈邮箱",
|
||||
paragraphs: ["douboer@gmail.com"],
|
||||
actionLabel: "复制邮箱"
|
||||
},
|
||||
{
|
||||
title: "建议附带的信息",
|
||||
bullets: ["机型与系统版本", "小程序版本号", "复现步骤", "截图或日志摘要"]
|
||||
},
|
||||
{
|
||||
title: "反馈范围",
|
||||
bullets: ["连接失败", "终端显示异常", "记录或设置异常", "建议与体验反馈"]
|
||||
}
|
||||
]
|
||||
},
|
||||
privacy: {
|
||||
title: "隐私政策",
|
||||
lead: "我们重视你的个人信息与数据安全。为支持同一账号在多设备间同步配置,系统会在服务器侧保存必要的设置、服务器配置与闪念记录;其中 SSH 密码、私钥、证书等敏感凭据不会以明文形式保存,而会在服务端加密后存储。",
|
||||
sections: [
|
||||
{
|
||||
title: "我们会处理的信息",
|
||||
bullets: [
|
||||
"你主动保存的用户设置,例如界面主题、终端显示偏好、默认连接参数、闪念分类与记录保留策略。",
|
||||
"你主动保存的服务器配置,例如名称、标签、主机、端口、用户名、项目路径、跳转主机配置,以及为跨设备同步所需的认证信息。",
|
||||
"你主动保存的闪念记录,例如正文、分类、上下文标签和更新时间。",
|
||||
"其中 SSH 密码、私钥、口令、证书及跳转主机对应凭据属于受保护字段,服务端仅以加密形式保存,用于在你已认证的设备间同步取回。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "信息用途",
|
||||
bullets: [
|
||||
"用于在同一账号下同步设置、服务器配置和闪念记录。",
|
||||
"用于在你更换设备或重新登录时恢复必要的连接配置与使用偏好。",
|
||||
"用于系统排查、稳定性分析和故障定位;此类处理仅限必要范围,不用于画像、营销或其他无关用途。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "信息存储方式",
|
||||
bullets: [
|
||||
"用户设置、服务器配置和闪念记录会同时保存在当前设备本地,并同步保存到服务端存储中,用于跨设备恢复。",
|
||||
"SSH 密码、私钥、口令、证书等敏感凭据不会以明文形式写入服务端数据库,而会在应用层加密后保存。",
|
||||
"系统错误日志、异常堆栈、基础版本信息、设备环境信息和连接状态信息可能在必要的排查场景下被处理。",
|
||||
"我们不会因为展示“关于”页面而额外收集与当前功能无关的个人信息。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "你的权利",
|
||||
bullets: [
|
||||
"你可以在应用内修改或删除自行保存的服务器配置、闪念记录与设置项;相关变更会同步到服务端。",
|
||||
"如需删除已同步的服务端配置数据,可通过后续提供的数据删除能力,或按“问题反馈”页提供的方式联系我们。",
|
||||
"如对隐私说明或数据处理方式有疑问,可通过“问题反馈”页提供的方式联系我们。"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
changelog: {
|
||||
title: "变更记录",
|
||||
lead: "当前页面完整同步仓库 `CHANGELOG.md` 的版本历史,便于直接查看连续版本演进。",
|
||||
sections: [
|
||||
{
|
||||
title: "索引说明",
|
||||
bullets: [
|
||||
"详细发布说明见 release.md。",
|
||||
"若 release.md 未单列某个 vx.y.0,则按 history.md 与 git 历史按连续版本规则补齐。",
|
||||
"x.y.z 的 patch 空档不额外补齐;历史补齐版本只用于保持序列连续。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v3.0.0(2026-03-18)",
|
||||
bullets: [
|
||||
"当前版本新增两项终端交互稳定性修复:高频 stdout 期间的 caret 稳定窗口,以及软键盘仍可见时 shell 输入被动 blur 保护。",
|
||||
"发布说明、README、关于页、当前基线文档、多语言文案与工程描述已统一升级到 v3.0.0。",
|
||||
"当前版本不新增新的同步协议、终端协议或配置字段,继续沿用 v2.9.6 已明确的能力边界。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.9.6(2026-03-13)",
|
||||
bullets: [
|
||||
"当前版本仅同步文档与对外口径,不引入新的功能、协议行为或交互变更。",
|
||||
"发布说明、README、关于页、当前基线文档、多语言文案与工程描述已统一升级到 v2.9.6。",
|
||||
"当前版本继续沿用 v2.9.5 已完成的现有终端、同步与时延诊断能力,以及当前语音播报边界口径。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.9.5(2026-03-13)",
|
||||
bullets: [
|
||||
"当前版本仅同步文档与对外口径,不引入新的功能、协议行为或交互变更。",
|
||||
"发布说明、README、关于页、当前基线文档、多语言文案与工程描述已统一升级到 v2.9.5。",
|
||||
"新登记一条小程序终端语音播报遗留问题:当前播报文本提取与轮次稳定判定仍不够准确,长时间 Codex 交互时也会额外放大小程序端响应压力,现阶段暂不建议默认使用。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.9.4(2026-03-12)",
|
||||
bullets: [
|
||||
"当前版本仅同步文档与对外口径,不引入新的功能、协议行为或交互变更。",
|
||||
"发布说明、README、关于页、当前基线文档、多语言文案与问题闭环记录已统一升级到 v2.9.4。",
|
||||
"当前 Web 与小程序基线继续沿用 v2.9.3 已完成的时延诊断面板与主题对比度收口结果。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.9.3(2026-03-11)",
|
||||
bullets: [
|
||||
"小程序时延诊断浮窗已改成单张双轴平滑曲线图,左轴显示网关响应,右轴显示网络时延。",
|
||||
"原“诊断信息”文字卡已删除,顶部改为两张两行摘要卡;同一服务器断开重连后会优先延续最近 30 个采样点。",
|
||||
"时延面板现已跟随终端主题做反相配色,深色终端会额外切换一套更深的蓝橙曲线与指标色,保证浅底上的文字和曲线可读性。",
|
||||
"发布说明、README、关于页、当前基线文档与问题闭环记录统一更新到 v2.9.3。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.9.1(2026-03-11)",
|
||||
bullets: [
|
||||
"小程序终端会话续接首次恢复已改为以 `lines + bufferCols / bufferRows` 为准,避免返回服务器列表后再次进入时出现历史区顶部空白与裸露 `5;2H`。",
|
||||
"启动阶段 `bootstrap` 合并配置完成后,首页服务器列表与底栏会立即刷新,不再需要重新进入页面才能看到同步后的配置。",
|
||||
"小程序用户隐私政策与 about 隐私页已按最新审核口径同步,补齐录音用途、处理范围与用户权利说明。",
|
||||
"发布说明、README、关于页、当前基线文档与问题闭环记录统一更新到 v2.9.1。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.9.0(2026-03-11)",
|
||||
bullets: [
|
||||
"小程序终端已修复 Codex 持续输出期间底部提示块缺行、状态行被裁掉与区域反复闪动的问题。",
|
||||
"normal buffer viewport 会保留光标行之后仍真实存在的 footer,`CSI ? 2026 h/l` 同步刷新窗口也已完成兼容收口。",
|
||||
"整行统一高亮背景会优先提升到 line 层绘制,`> Use /skills to list available skills` 与代码块不再透出行间底色细线。",
|
||||
"会话续接恢复口径已修正:首次恢复优先使用 `lines + bufferCols / bufferRows` 还原当前屏幕,避免返回服务器列表后再次进入时出现历史区顶部空白与裸露 `5;2H`。",
|
||||
"当前版本最重要的变更聚焦在交互问题修复;发布说明、README、关于页、当前基线文档与问题闭环记录统一更新到 v2.9.0。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.8.2(2026-03-10)",
|
||||
bullets: [
|
||||
"服务器列表 connect 按钮与底栏 shell 按钮在活动连接态统一改为高饱和实底高亮,不再依赖描边反馈。",
|
||||
"连接态 SVG 前景色改为运行时跟随界面前景色,保证高亮底色上的图标对比度。",
|
||||
"about 首页、详情页与 about-app 改为按界面配置推导配色;Web about 页同步切到同一套主题变量策略。",
|
||||
"新登记一条 about 反馈遗留问题:当前“反馈”按钮仍只复制邮箱地址,暂不支持直接拉起系统发送邮件组件。",
|
||||
"发布说明、根 README、小程序 README、关于页与当前基线文档统一更新到 v2.8.2。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.8.1(2026-03-10)",
|
||||
bullets: [
|
||||
"终端语音区展开按钮默认改为全透明,仅保留 SVG 本体;分类胶囊改为贴文字高度,选中态背景切到更明显的实色。",
|
||||
"录音中的输入框上方新增更显眼的双环脉冲提示,文案更新为“正在收音,松开后发送或记录闪念”。",
|
||||
"终端 VT 当前基线继续收口:OSC 10 / 11 / 12 返回真实 shell 主题色,备用屏与擦除空白位统一继承当前擦除背景。",
|
||||
"此前点击 Codex 连接选项后的首回显迟滞与等待期间按钮阻塞问题已收敛,当前版本不再将其列为遗留问题。",
|
||||
"另记录一个低频终端遗留问题:偶发新连接后首屏只显示光标、提示符稍后才出现;后续再优化连接就绪判定与 prompt 首屏兜底。",
|
||||
"发布说明、根 README、小程序 README、关于页与当前基线文档统一更新到 v2.8.1。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.7.1(2026-03-10)",
|
||||
bullets: [
|
||||
"文档与关于页版本口径统一更新到 v2.7.1,并补齐同步 SQLite 的当前边界说明。",
|
||||
"明确 remoteconn-sync.db-wal 是 SQLite 写前日志,文件体积不直接等于当前有效同步数据量。",
|
||||
"当前跨设备同步仍仅覆盖 settings / servers / records;日志、插件运行时日志与终端会话缓冲继续保留本地。",
|
||||
"当前小程序终端仍存在明显交互卡顿:点击 Codex 连接选项后约 10 秒才出现回显,等待期间除上下滑动外其余按钮基本阻塞。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.7.0(2026-03-09)",
|
||||
bullets: [
|
||||
"小程序设置、服务器配置与闪念记录接入 Gateway + SQLite 双层持久化,支持同一账号跨设备恢复。",
|
||||
"同步链路补齐 bootstrap 与 settings / servers / records 增量推送;服务器和闪念删除支持 tombstone 合并。",
|
||||
"SSH 密码、私钥、口令与证书等受保护字段改为服务端加密保存;终端会话缓冲仍不纳入第一阶段同步。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.6.6(2026-03-09)",
|
||||
bullets: [
|
||||
"文档口径统一更新到 v2.6.6。",
|
||||
"将“通过 npm run mini 生成的 preview 预览包,不作为正式版本地缓存连续性验证依据”记录为当前遗留问题。",
|
||||
"服务器配置、用户设置与闪念记录改为本地 storage + Gateway 同步双层持久化;SSH 密码、私钥、口令与证书等受保护字段在服务端加密保存。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.6.5(2026-03-08)",
|
||||
bullets: [
|
||||
"小程序终端 VT P0 基线收口,补齐双缓冲、备用屏幕切换、DSR / CPR / DA1 / DA2 / DECSTR 与基础局部重绘。",
|
||||
"修复 normal buffer 的 live tail 与滚动边界问题,并同步更新当前文档基线到 v2.6.5。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.6.1(2026-03-08)",
|
||||
bullets: [
|
||||
"将“修改字号后偶发吃字/显示不完整”收口为已知遗留问题,并在设置页增加“修改字号后建议断开重连”提示。",
|
||||
"收敛数字输入、字体回退与设置页容错逻辑,移除排查阶段的 terminal.wrap 调试输出。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.6.0(2026-03-07)",
|
||||
bullets: [
|
||||
"小程序补齐跳转主机、AI 快速启动、后台续接与连接反馈等主链路能力。",
|
||||
"小程序继续补齐终端可用性细节:光标位置计算修复,AI 启动链路正式落地到小程序端。",
|
||||
"SSH relay / 跳板机链路从“可配置”推进到“可经 A 主机直接转发连接 B 主机”。",
|
||||
"文档口径统一升级到 v2.6.0,并将历史 v2.4.0 说明并入当前对外版本。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.5.0(历史补齐,2026-03-07)",
|
||||
bullets: [
|
||||
"依据 v2.3.0 -> v2.6.0 之间的历史记录,按 3 小时一个 minor 版本的规则补齐。",
|
||||
"该阶段主要是 v2.6.0 之前的小程序终端链路收口与 AI、跳板机场景串联,详细内容已并入 v2.6.0。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.4.0(历史补齐,2026-03-07)",
|
||||
bullets: [
|
||||
"history.md 中明确出现版本号 v2.4.0,后续在 v2.6.0 中并档处理。",
|
||||
"该阶段集中于小程序终端光标、列宽与 cell 模型重构,以及相关分析文档沉淀,详细内容已并入 v2.6.0。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.3.0(2026-03-06)",
|
||||
bullets: [
|
||||
"小程序完成一轮大范围能力对齐,补齐 connect / server settings / terminal / logs / records / settings / plugins 主页面链路。",
|
||||
"Web 端继续精修交互与稳定性,文档口径统一到 v2.3.0。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.2.0(2026-03-06)",
|
||||
bullets: [
|
||||
"闪念增强定稿,补齐分类、编辑、搜索、过滤、快速改分类与上下文快照。",
|
||||
"全局配置补齐闪念分类治理、默认分类与拖拽排序。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.1.0(历史补齐,2026-03-01)",
|
||||
bullets: [
|
||||
"依据 v2.0.0 -> v2.2.0 之间的历史记录,按 3 小时一个 minor 版本的规则补齐。",
|
||||
"该阶段主要完成小程序连接页、服务器配置页、远程目录选择与基础对齐链路,为 v2.2.0 的记录增强和 v2.3.0 的大范围对齐打底。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v2.0.0(2026-02-27)",
|
||||
bullets: [
|
||||
"语音输入交互对齐 Figma,闪念记录闭环上线。",
|
||||
"日志与记录分页、资源缓存治理、文档与发布规范同步统一。",
|
||||
"语音层与键盘工具层的命中区继续收敛,修复工具栏被误判为外部点击后自动折叠的问题。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v1.1.0(2026-02-26)",
|
||||
bullets: [
|
||||
"终端语音输入全链路、Gateway ASR 代理与 Web 稳定性增强。",
|
||||
"终端输入增强为“原生 textarea + 语音输入面板 + 发送确认”组合,并补入 TAB 辅助键。",
|
||||
"路由懒加载失败增加自动恢复,缩放防护补齐到 double-tap / dblclick 等路径。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v1.0.9(2026-02-25)",
|
||||
bullets: [
|
||||
"连接体验治理、服务器列表拖拽排序与移动端防误触优化。",
|
||||
"连接与服务器管理继续收敛:支持连接重试次数与分组;新增服务器改为先进入配置页,未改动不落库。",
|
||||
"导航与配置页体验统一:返回语义按历史栈处理,终端配置页增加预览块,配置页 UI 完成一轮重构。",
|
||||
"终端工具与视觉细节补齐:新增 paste 辅助按钮,修复字体选择,补齐夜间模式与重连提示样式。",
|
||||
"会话恢复体验补强:同连接历史可延续,刷新“我的服务器”页默认不主动断开现有会话。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v1.0.8(2026-02-24)",
|
||||
bullets: [
|
||||
"配置中心稳定性、深浅色模式与网关 runtime 配置落地。",
|
||||
"配置中心结构重组:服务器基础/认证绑定到当前服务器,终端/主题/安全切到全局配置。",
|
||||
"配置与工具区交互继续收敛:点击外部区域可折叠右下角键盘工具条,Figma 配置区交互并入当前基线。",
|
||||
"终端提示文案与初始化输出治理:连接提示更友好,中文输入初始化命令回显默认不展示。"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "v1.0.6(2026-02-24)",
|
||||
bullets: ["Console 触摸工具区可点击性与误触防护优化。"]
|
||||
},
|
||||
{
|
||||
title: "v1.0.5(2026-02-23)",
|
||||
bullets: ["iPhone 触摸滚动动量阶段性优化。"]
|
||||
},
|
||||
{
|
||||
title: "v1.0.3(2026-02-23)",
|
||||
bullets: ["iOS 触摸焦点状态机稳定性修复。"]
|
||||
},
|
||||
{
|
||||
title: "v1.0.1(2026-02-23)",
|
||||
bullets: [
|
||||
"生产架构版稳定性更新,确立 Web、Gateway 与插件运行时的多包工程基线。",
|
||||
"补齐多服务器与多认证方式管理,最近连接日志可追溯。",
|
||||
"Codex 模式主链路可用:连接后自动切目录并启动 codex。",
|
||||
"主题与界面自定义基础能力上线,含字体、配色与基础配置中心。"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
app: {
|
||||
title: "关于",
|
||||
lead: "",
|
||||
sections: [
|
||||
{
|
||||
title: "产品信息",
|
||||
bullets: [
|
||||
"产品名称:RemoteConn",
|
||||
"中文名称:AI矩连",
|
||||
"平台标识:AI矩连小程序版",
|
||||
"当前版本:v3.0.0",
|
||||
"修改时间:20260318",
|
||||
"数据口径:设置、服务器配置与闪念支持跨设备同步,敏感凭据服务端加密保存",
|
||||
"反馈邮箱:douboer@gmail.com",
|
||||
"更新时间:2026-03-18"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
export function isAboutDetailKey(value: string): value is AboutDetailKey {
|
||||
return value in ABOUT_DETAIL_CONTENT;
|
||||
}
|
||||
|
||||
export function getAboutDetailContent(key: string): AboutDetailContent {
|
||||
if (isAboutDetailKey(key)) {
|
||||
return ABOUT_DETAIL_CONTENT[key];
|
||||
}
|
||||
return ABOUT_DETAIL_CONTENT.app;
|
||||
}
|
||||
|
||||
export function buildAboutInfoRows(content: AboutDetailContent): AboutInfoRow[] {
|
||||
const primarySection = content.sections[0];
|
||||
const bullets = Array.isArray(primarySection?.bullets) ? primarySection.bullets : [];
|
||||
return bullets.map((line, index) => {
|
||||
const text = String(line || "").trim();
|
||||
const matched = text.match(/^([^::]+)[::]\s*(.+)$/);
|
||||
if (!matched) {
|
||||
return {
|
||||
key: `row-${index}`,
|
||||
label: "",
|
||||
value: text
|
||||
};
|
||||
}
|
||||
return {
|
||||
key: `row-${index}`,
|
||||
label: `${matched[1]}:`,
|
||||
value: String(matched[2] ?? "")
|
||||
};
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user