Skip to content

项目结构约定

字数
848 字
阅读时间
4 分钟

本文档用于统一仓库目录职责,减少“文件放哪儿”的沟通成本。该约定对新增内容即时生效;历史内容按“改到再搬”渐进调整,不要求一次性重构。

顶层目录职责

  • src/: 业务源码
  • tests/: 单元测试与集成测试
  • docs/: 面向开发与部署的文档(索引见 docs/README.md
  • config/: 主配置示例与 Compose 插值(pallas.example.tomlcompose.env.example
  • scripts/: 运维脚本(如 run_sharded_bot.sh 分片启动)
  • local/plugins/: 站点自有插件(extra_plugin_dirs,见 站点定制
  • tools/: 维护脚本与辅助配置
  • .github/workflows/: CI/CD 流水线
  • data/: 运行期持久化数据(pallas_config/webui.json、各插件子目录等)
  • resource/: 项目静态资源(如语音、样式)

源码分层约定

  • src/plugins/: 业务插件,按功能域拆分
  • src/foundation/src/platform/src/features/src/console/src/domain/src/shared/: 跨插件复用内核(见 common-layers.md

约定原则:

  1. 插件业务代码优先放在 src/plugins/<plugin_name>/
  2. 可复用能力优先沉淀到 src/ 各内核层,避免在插件间复制
  3. 新增目录时优先保持语义单一,避免「脚本+配置+文档」混放

补充说明:

  • 插件持久化数据统一落在 data/<plugin_name>/...,原因是方便备份与按插件排障。
  • 插件资源统一放在 resource/...,原因是便于复用并避免插件目录携带大体积二进制资产。

项目内实际示例:

  • data/greeting/greeting 插件的好友欢迎消息持久化目录。
  • data/help/help 插件的帮助图渲染缓存目录。
  • data/request_handler/request_handler 插件的待处理申请缓存目录。
  • resource/voices/greeting 使用的语音资源目录。
  • resource/styles/help 插件的样式资源目录。

测试目录约定

  • 测试目录尽量镜像源码目录,例如:
    • src/plugins/repeater/... -> tests/plugins/repeater/...
    • src/foundation/db/... -> tests/common/...
    • src/console/web/... -> tests/common/web/...

这样可以降低定位测试与补测成本。

文档目录约定

  • docs/Deployment.mddocs/DockerDeployment.md:部署类文档
  • docs/FAQ.md:常见问题
  • docs/architecture/:架构与约定文档(本文件所在目录)
  • docs/plugins/:插件专项说明(按插件目录组织)

目录约定:

  • 每个插件使用独立目录:docs/plugins/<plugin_name>/README.md
  • 插件文档总索引:docs/plugins/README.md

当前已迁移的插件文档见 plugins/README.md(21 个用户向插件 + 通用能力文档)。

tools 目录约定

为避免语义混杂,当前按以下方式拆分:

  • tools/scripts/: 可执行脚本(如备份、清理、迁移)
  • tools/config/: 仅工具侧配置文件

根目录协作文件

  • AGENTS.md 建议保留在仓库根目录,便于贡献者与 Agent 统一读取协作约定。
  • .pre-commit-config.yaml.pre-commit-ci.yaml 建议保留在仓库根目录,便于工具默认发现与执行。

渐进落地策略

  1. 新增文件按本约定放置
  2. 历史文件在“改到再搬”的原则下逐步迁移
  3. 每次 PR 只做小步调整,避免大规模无关重排