mirror of
https://github.com/dataelement/dsh-desktop.git
synced 2026-09-28 05:23:01 +08:00
* docs: establish repository-wide AGENTS development standards and governance contracts - Add root AGENTS.md defining project boundaries, TypeScript code style, dependency/data constraints, and verification runbooks. - Add directory-scoped AGENTS.md rules for src/main, src/preload, packages, patches, and build. - Add supporting design specifications: - docs/code-standards.md (design rationale and phased tool enforcement) - docs/patch-plugin-contract.md (patch vs plugin selection and slot compatibility) - docs/source-build-contract.md (single authoritative source and build artifact boundaries) * docs: 补齐 AGENTS 前端硬约束与企业/编译型包覆盖 把主题 token、locale、preload 与 slot 边界写成可执行规则,并标出 enterprise 存量与 ppt-runtime 的维护入口。 --------- Co-authored-by: fairy <3054158379@qq.com>
7.1 KiB
7.1 KiB
DSH Desktop 代码规范设计说明
设计出发点:桌面宿主的风险与边界
DSH Desktop 的主要工程问题来自 Electron 特权边界、Harness 子进程与插件生命周期、用户本地数据、上游兼容和原生安装包。规范按这些问题组织,每条硬约束应能指出要保护的边界及验证方法。
| Desktop 特性 | 需要约束的行为 | 验证重点 |
|---|---|---|
| Electron main / preload / Web UI 分进程 | 最小权限 IPC、可序列化契约、来源及参数校验 | 合法请求与拒绝路径,真实窗口行为 |
| Harness 独立进程、托盘和多实例 | 生命周期清晰、启动幂等、退出清理、主进程不阻塞 | 重启、退出、唤醒及重复事件 |
| Profile 与插件落在用户磁盘 | 有边界的写入、原子切换、失败恢复、保留旧状态 | 安装中断、迁移回滚、文件占用 |
| 上游 Web UI + 宿主插件 + patch | 优先扩展点、保留加载协议、补丁可重放 | 干净安装、真实加载、上游升级兼容 |
| 流式会话与长期运行窗口 | observer/订阅有界,异步结果不过期回写 | 长会话、热重载、隐藏窗口 |
| macOS / Windows 原生分发 | 路径、进程、资源位置及签名按目标平台验证 | 安装包内实际文件和实际启动流程 |
| 多种 UI 承载方式 | Harness 界面复用主题与 locale,恢复页独立可用 | 中英文、深浅主题、Harness 启动失败 |
从 Bisheng 取什么、舍什么
已参考 Bisheng 根目录及 frontend platform/client/ui 的 AGENTS、ESLint 配置和质量 workflow。只借鉴三项治理方法:规则分层且单处维护、可检查规则交给工具、存量问题逐步收敛。
具体技术规则由本仓库推导:
- 不采用统一 600 行上限;按独立职责、状态和清理流程决定拆分,避免为行数打散生命周期。
- 不强制纯 TS/TSX;
src/保持 strict TS,插件及运行时入口保留当前 JS/MJS 加载方式。 - 不引入 SPA 的目录层级、HTTP/store 框架、路由别名或组件库。不自建第三套主题 token:Harness 内插件只复用
--dsw-alias-*,独立恢复页用自有语义变量。IPC 和插件请求各自约束,不强行抽成同一种服务层。 - 不引入三语要求、全局禁中文或英文注释硬门禁;插件文案走
ctx.locale,中英文 key 同批维护,词典和展示逻辑分离。 - 不沿用其他浏览器环境的磨砂效果禁令;围绕流式会话、长期驻留、隐藏窗口和目标机器的实测成本约束性能。
- 不复制专用 skill、固定审批阶段或全套历史豁免机制;先看本仓库实际问题规模,再选最小可用工具方案。
本次审阅发现的现状
依据当前 worktree(起点 f7aebb5)静态检查,以下是本次快照,不是永久基线:
src/main/index.ts2,931 行、src/preload/index.ts1,186 行、market installerclient.js717 行。首要维护性问题是职责集中,单纯格式化不能解决。- 根
tsconfig.json已启用 strict 和noUncheckedIndexedAccess。tsconfig.node.json未包含插件 JS、脚本及 HTML 内嵌代码。 package.json有 test/typecheck/build,无 lint/format 检查脚本。当前 release workflow 有原生平台测试、类型检查和打包流程;没有独立的 lint 门禁。- 桌面 UI 同时存在 Harness loader 插件、preload DOM 注入和独立 HTML。不能用一套 SPA 检查配置假设所有文件拥有相同 globals、模块格式和主题环境。
packages/dsh-desktop-enterprise与src/main/enterprise/已是完整企业登录面,但主题用--ds-*、文案用navigator.language内联copy。规范将其标为待迁移存量,不在本次整改代码。docs/development.md的固定 Harness 版本描述与当前依赖不一致;因此规范引用配置作为事实源,不在每份 AGENTS 中复制版本号。
规则分层
根 AGENTS.md 放项目定位、目录导航、通用编码和交付要求。main 放进程/权限/数据生命周期(含 enterprise/);preload 放桥接、slot 与 DOM 注入判定;packages 放模块加载、UI 插件、主题/locale 硬约束、编译型包与 generation;patches 放上游补丁维护;build 放独立页面和打包输入。
本说明解释取舍和后续工具计划,不复制具体硬规则。暂不增加独立 constitution:当前模块规模下多一份重复法律文件更易漂移。若未来根规范显著膨胀,再抽取稳定架构原则并仅保留链接。
工具落地顺序(以下均为待实施)
第一阶段:可复现的质量门禁
- 增加 ESLint 配置,分别设置 TS main/shared、preload browser+Electron、插件 client loader、Node JS/MJS 的运行环境。只对 React 代码启用 Hooks 检查;loader factory 的
require不能被误判为任意 CommonJS 引入。 - 优先检查未定义变量、无用变量、无理由 any/TS 忽略、Hooks 规则和危险跨层 import。增加 shared 不依赖特权实现、preload 不引入业务文件操作的边界检查;允许例外按具体文件和 API 限定。
- 格式检查单独落地。排除第三方 tgz、patch diff、生成资源、构建输出;
build/的手写入口和页面不能整目录忽略。首次格式整理独立提交。 - 在 PR workflow 接入 lint + 当前 typecheck/test/build,校验本地命令和 CI 一致;保护分支所需检查状态需另行核实配置。
第二阶段:存量基线与覆盖扩展
- 先扫描新增规则的真实违规量;少量问题直接修复。只有存量较大且不能随工具接入安全修复时,才建立文件/规则级基线并阻止增长,修复后裁剪豁免。不要预先复制一套复杂 suppression 系统。
- 新文件严格检查;被修改逻辑不新增违规。历史大文件的小修复不强制清理全文件,但新增职责不能继续塞入入口。
- 插件 JS 逐包评估
checkJs/独立 tsconfig 或专用类型验证;先处理真实导出和 loader 环境,不通过大面积any制造通过结果。 - 为中英文词典补 key parity 检查,独立 HTML 补充脚本/模板安全检查。中文词典本身合法,不能简单用“含汉字即报错”扫描所有代码。
- 超长模块作为重构线索,评审检查是否混合多个生命周期和副作用;不把行数设为 CI 硬门禁。迁移成果以清晰边界及回归行为评估。
第三阶段:按风险补真实验收
| 改动 | 所需证据 |
|---|---|
| 纯文案、样式 | 对应页面中英文、深浅主题及必要交互 |
| IPC / 权限 | 参数与来源拒绝测试,真实 Electron 允许/拒绝路径 |
| Profile / generation | 临时目录失败恢复、重复执行、实际活动链接和加载验证 |
| 上游 patch / 插件 loader | 干净安装重放、真实加载及受影响用户流程 |
| Windows 路径 / 子进程 | Windows 测试与对应安装包 smoke |
| 正式 release | 按 runbook 核实 SHA/tag、各目标产物、签名和发布状态 |
本次仅交付规则文档,未安装 lint 工具、生成存量豁免、修改 CI、拆分代码或执行应用验收。工具接入应另做范围明确的变更,不能把此文档作为门禁已启用的证据。