OpenProgram · Engineering design

Repository structure

本页定义代码与文档的归属边界、超长文件的拆分条件,以及当前可实施的整理顺序。目标是降低修改时需要同时理解的范围,不以文件数量或单一行数作为拆分目标。

Status
Current design
Audience
Maintainers and reviewers
Scope
Source layout and docs navigation
Excluded
Product behavior and public API changes

1. 设计原则

按产品职责归属

Python 产品行为放在 openprogram/ 的产品域;Web、CLI 和 Desktop 分别保留在自己的 workspace。跨界调用通过稳定入口完成,不复制实现。

按可验证边界拆分

只有当一段代码具有独立输入、输出和测试入口时才移动。单纯因为文件长而引入 mixin、manager 或 facade 不属于有效拆分。

公共接口保持稳定

移动实现时保留现有 import、CLI 参数和运行行为。调用方无需在同一批次迁移,结构改动可以单独回滚。

当前设计与实施记录分离

本 HTML 只描述长期结构;具体提交、测试结果和未完成工作记录在独立的 implementation ledger 中。

2. 顶层职责

OpenProgram/
  openprogram/   Python 产品运行时与服务端
  web/           Next.js Web 客户端
  cli/           Ink 终端客户端
  desktop/       Electron 宿主与桌面检查
  tests/         Python 测试:层级 / 产品域
  docs/          用户文档与设计记录
  scripts/       可直接执行的开发、验证和发布脚本
  tools/         可导入的仓库维护工具
  examples/      面向用户的最小可运行示例
  skills/        随产品分发的技能
  config/        产品运行时构建清单
  experiments/   可复现实验,不参与产品运行时
  references/    参考实现快照与本地比较语料
  promo/         发布与宣传源文件
  site/          静态站点入口

.github/.codegraph/.superpowers/ 是仓库基础设施,不是产品运行时目录。根目录只保留项目元数据、入口文档、依赖锁和构建配置;可执行的 .py.ps1.sh 工具进入 scripts/ 或对应 workspace 的 scripts/

tests/ 中的 Python 用例使用 tests/<layer>/<product-domain>/test_*.py,按最强实际依赖选择层级。具体边界由 Testing system 和仓库 contracts 维护。

3. 超长文件处理

文件现状决定边界
openprogram/cli.py 参数声明与命令执行共处,约 2,000 行 本批实施 把现有 parser 定义移到 openprogram/_cli_parser.pyopenprogram.cli.build_parser 继续可用。
desktop/main.js 窗口、更新、WebView、标签转移和菜单共处,接近 4,000 行 后续批次 按窗口生命周期、原生 WebView、标签转移、菜单四个既有域移动;先等待当前 Desktop 修改合并。
web/lib/desktop-bridge.ts 类型、视图状态和标签转移共处,接近 2,000 行 后续批次 先补执行级测试,再拆为公共类型、view state、tab transfer,并由原文件 re-export。
runtime.pyrunner.pyresource_governance.py 文件较长,但核心状态机和不变量集中 不按长度拆 只有出现可独立验证的职责或重复实现时再拆;不引入 mixin 层。
大型检查脚本与 native runtime 测试场景多或包含同步的上游实现 保持现状 优先改善测试数据和局部 helper,不用生产目录规则约束测试及 vendor 文件。

4. 文档信息架构

用户文档

start/install/capabilities/interfaces/models/integrations/server/reference/。进入公开导航和搜索。

当前设计

reference/design/。按产品域展示当前有效的设计说明;UI 文档按基础、会话编辑、浏览器标签、设置目录、工作区分组。

实施记录

与设计页相邻的 implementation ledger 以及 reference/design/plans/,只记录提交、门禁、剩余任务和实施历史,不把执行过程写进概念设计。

内部计划

docs/superpowers/ 保留在 Git 中供维护者追溯,不进入公开站点。仍被当前设计引用的 reference/design/plans/ 继续发布,并保持独立 Plans 分组。

5. 采用与拒绝

选择结论原因
move-only 模块拆分采用可以通过兼容 import 和 parser 快照证明行为不变。
通过导航分组整理文档采用避免批量移动文件造成旧链接失效。
按固定行数自动拆文件拒绝行数不能证明职责独立,容易产生只转发调用的模块。
为拆分引入新的依赖注入框架拒绝现有模块函数和显式参数足以保留边界。
一次重排整个仓库拒绝会扩大冲突范围,难以区分结构变化与产品行为变化。

6. 验收合同

实现状态和可复现命令见 Repository structure implementation ledger