Keel 源码模块关系归档

Keel 仓内全部源码模块 + 各模块的责任 / 依赖 / 产出物。归档目的:人 / AI 接手时一眼看清每个目录是干什么的、产物给谁用。

同名歧义提醒keel/docs/modules.md 说的是 Keel 维护的 5 个国内一等 npm 模块(微信 / 支付宝 / 高德 / 极光 / 友盟)。本文说的是 Keel 仓内自己的代码模块source/ + packages/* + cli/ + cloud/ 等)。

0. 一图看全

┌─────────────────────────────────────────────────────────────────────────┐
│                       Keel 源码模块拓扑                                 │
└─────────────────────────────────────────────────────────────────────────┘

【ship binaries】
   keel/build/ios/Keel.xcframework      ← packaging/build-ios.sh
   keel/build/android/keel-sdk.aar      ← packaging/build-android.sh
   appunvs/cloud-build-mobile:latest (Docker)  ← cloud/packaging/build-cloud-build.sh
   keel/go/build/{ios.ipa,android.aab}  ← packaging/build-keel-go.sh

【消费这些产物的下游】
   host apps             ←  Keel.xcframework / keel-sdk.aar
   Keel Go tester app    ←  Keel.xcframework / keel-sdk.aar
   build orchestrators   ←  appunvs/cloud-build-mobile:latest (via DockerBuilder)

────────────────────────────────────────────────────────────────────────────

【源码模块】顶层目录直接对应职能分类。

🟦 1. SDK 二进制源 (`sdk/`)         ← @keel-ai/keel umbrella + Keel.xcframework / keel-sdk.aar
   sdk/
   ├─ package.json                  npm: @keel-ai/keel
   ├─ Keel.podspec                  iOS autolinking entry
   ├─ react-native.config.js        Android sourceDir → android/keel-sdk
   ├─ ios/Keel/
   │  ├─ Keel.h / Keel.mm           ObjC++ 头 + 桥
   │  ├─ KeelView.swift             开放基类 (host shell subclass it)
   │  ├─ KeelHostModule.mm          HostBridge native impl
   │  └─ KeelJSIInstall.{h,mm}      bootstraps __keel namespace per Hermes runtime
   ├─ android/
   │  ├─ settings.gradle            standalone gradle root (publishToMavenLocal)
   │  └─ keel-sdk/
   │     ├─ build.gradle            srcDirs += [../../modules-core/android/src/main/java]
   │     ├─ src/main/cpp/CMakeLists.txt    builds libkeel.so (pulls modules-core/cpp/)
   │     └─ src/main/java/com/appunvs/keel/   KeelView.kt / KeelHostModule.kt / KeelJSI.kt
   └─ src/index.ts                  TS surface (KeelSDK.isAvailable())

   产出: Keel.xcframework / keel-sdk.aar / @keel-ai/keel npm
   消费者: host apps, Keel Go, Keel Gallery

🟦 2. Module framework (`modules-core/`)   ← @keel-ai/modules-core + Swift Macros + Kotlin KSP
   modules-core/
   ├─ cpp/                          KeelJSIBinding + KeelMarshal (cross-platform C++)
   ├─ ios/KeelModuleCore/           Swift KeelModule base + KeelInstallContext
   ├─ android/                      Kotlin runtime, included into keel-sdk.aar via srcDirs
   ├─ android-ksp/
   │  ├─ keel-annotations/          @KeelModule + @Constant + @AsyncFunction
   │  └─ keel-ksp/                  SymbolProcessor: emits <Class>_KeelGenerated.kt
   ├─ macros/                       SwiftPM CompilerPlugin
   │  ├─ KeelMacros (declarations)
   │  ├─ KeelMacrosImpl (SwiftSyntax)
   │  └─ KeelTSGen (CLI: @KeelModule sources → __keel.d.ts)
   ├─ src/                          TS surface (requireKeelModule + defineAsyncMethods)
   ├─ src/cli.ts                    keel-module install / link / test / publish
   └─ templates/                    create-keel-module 模板源

   产出: @keel-ai/modules-core npm + KeelModuleCore pod + 嵌入 keel-sdk.aar
   消费者: 所有 @keel-ai/* feature 包 + 所有 keel-module-* vendor 包

🟦 3. Feature packages (`packages/<name>/`)   ← @keel-ai/* Expo-style 平台能力
   (note: `@keel-ai/keel` umbrella + `@keel-ai/modules-core` 已搬出 packages/,
    分别在顶层 sdk/ 和 modules-core/。packages/ 现在只放 feature 包。)
   ├─ application/   bundle metadata
   ├─ asset/         remote asset cache
   ├─ apple-signin / google-signin / auth-session
   ├─ constants/     status bar / platform / simulator
   ├─ device/        model / manufacturer / OS
   ├─ font/          runtime font registration
   ├─ router/ + router-metro-plugin/   file-based routing
   └─ updates/       OTA client (TS + Swift + Kotlin 并行实现)

   产出: 每个一个 npm 包 + podspec / aar (RN autolink)
   集成: host app `yarn add @keel-ai/<name>`

🟦 4. Vendor modules (`modules/<name>/`)   ← create-keel-module 产出的国内一等模块
   ├─ keel-module-alipay/   支付宝
   ├─ keel-module-amap/     高德地图
   ├─ keel-module-push/     极光 + 个推抽象层
   ├─ keel-module-umeng/    友盟统计
   └─ keel-module-wechat/   微信支付 / 登录 / 分享

   每个都用 @KeelModule + @AsyncFunction (KSP/Macros 驱动),模板化产出。
   `modules/` 只放 `create-keel-module` scaffolder 的输出形态。

🟦 5. End-user apps (`apps/<name>/`)   ← create-keel-project 产出的 app
   └─ keel-gallery/    从 blank template scaffold 出来,演示典型 Keel app 结构

   `apps/` 严格只放 `create-keel-project` 产出形态的 app。

🟦 6. Tools (`tools/`)                  ← scaffolders + dev tools
   ├─ create-keel-project/                 `npm create keel-project my-app`
   ├─ create-keel-module/              `npm create keel-module my-mod`
   ├─ bundle-atlas/                    bundle 内部可视化
   └─ router-metro-plugin/             build-time route discovery(编译插件)

🟦 2. CLI (`cli/`, npm publishable `@keel-ai/cli`)
   └─ cli/
      ├─ src/commands/
      │  ├─ build.ts              远端 Cloud Build 触发
      │  ├─ doctor.ts             env 自检
      │  ├─ manifest.ts           查 / 改远端 manifest
      │  ├─ publish.ts            上传 bundle → Update server
      │  ├─ rollback.ts           rotate "current" pointer
      │  ├─ start.ts              本地 dev server (metro + QR for Keel Go)
      │  ├─ submit.ts             Submit 5+2 市场
      │  ├─ dev-client.ts         Dev Client (V1 scaffold; V1.5 实拨)
      │  ├─ install.ts            RN-aware npm install
      │  ├─ login.ts / logout 
      │  └─ stubs.ts              native module 的 stub 生成
      ├─ src/api/                 Update / CloudBuild HTTP clients
      └─ src/util/

   产出: bin/keel (npm bin)
   依赖: HTTP 调 Update server + Cloud Build server
   消费者: 终端 RN 开发者

🟧 3. Cloud Build (`cloud/`)
   ├─ cloud/build-image/         Docker 构建上下文
   │  ├─ Dockerfile
   │  ├─ build-bundle.sh
   │  ├─ metro.config.js
   │  └─ fixture-rn/
   ├─ cloud/cmd/build-server/   HTTP 入口
   └─ cloud/internal/cloudbuild/      job queue, runner, artifact

   产出: appunvs/cloud-build-mobile:latest Docker image + keel-build-server
   消费者: keel/cli/src/commands/build.ts

🟧 4. Update (`cloud/`)
   ├─ cloud/cmd/update-server/   HTTP 入口
   └─ cloud/internal/update/     manifest / patch / rollout / blob / monitoring

   产出: keel-update-server
   依赖: SQLite (默认) / Postgres + S3-compat (含阿里云 OSS) + CDN
   消费者: Keel runtime + keel cli publish/rollback

🟧 5. Submit (`cloud/internal/submit/`)
   ├─ submit.go + registry_test.go
   └─ drivers/{appstore,googleplay,huawei,xiaomi,oppo,vivo,yyb}/

   产出: 库 (无独立 binary, 通过 cli `keel submit` 触发)

🟧 Push 服务端 (`cloud/cmd/push-server/`)
   极光 + 个推 dispatcher。

🟪 配套:Keel Go (tester app)
   └─ go/
      ├─ src/{App,HomeScreen,PreviewScreen,NativeKeelView,ScannerOverlay,recents}.tsx
      ├─ ios/                     Xcode project (links Keel.xcframework)
      └─ android/                 Gradle project (links keel-sdk.aar)

   产出: KeelGo.ipa + keel-go.aab
   消费者: 终端 RN 开发者

🟪 配套:Keel Snack (浏览器 playground)
   └─ snack/
      Next.js + Monaco 编辑器 + RN Web fallback(importmap → esm.sh RN Web,
      浏览器内 Babel 转 TS+JSX,zero-server)

🟪 Examples
   └─ apps/examples/0[1-5]-* (5 个端到端示例)

🟫 共用底层 (`cloud/internal/`)
   ├─ keelauth/                  API key / OIDC SSO / RBAC / 审计日志
   └─ billing/                   订阅 / 套餐 + 微信支付 / 支付宝

🟫 文档 (`docs/`)
   ├─ architecture.md            5 层产品总览
   ├─ source-modules.md          👈 本文
   ├─ modules.md                 5 个一等 npm module spec
   ├─ deployment-sop.md          自建实例运维手册
   ├─ deployment.md              部署架构总览
   ├─ enterprise-distribution.md 私有渠道方案
   ├─ update.md / submit.md / build.md
   ├─ governance.md / roadmap.md / pricing.md
   ├─ tutorial.md                从零到上架教程
   ├─ examples.md / keel-go.md / snack.md
   ├─ custom-domain.md / github-actions.md / source-modules.md
   └─ ...

🟫 Packaging (`packaging/`)
   ├─ build-ios.sh               产 Keel.xcframework(操作 source/)
   ├─ build-android.sh           产 keel-sdk.aar(操作 source/)
   ├─ build-fixture.sh           产 RuntimeRoot.jsbundle
   ├─ release.sh                 一键收集 release 物料
   └─ build-keel-go.sh           产 KeelGo ipa + aab

🟫 Site (`site/`)
   Astro 4 marketing site + i18n(zh 默认 / en 在 /en/)

🟫 Deploy (`cloud/deploy/helm/keel/`)
   Helm chart:update-server + build-server + push-server

1. 各模块 SLA / 接口稳定性等级

模块公开 API兼容承诺
Native SDKnative class names (KeelView 等)semver;breaking 改动需 major bump
CLI (@keel-ai/cli)命令行 + flag 表semver;命令重命名要保留 alias 1 个 minor
Update serverREST endpoints (/v1/{project}/...)加 endpoint 自由;改 schema 要 v1→v2
Open Monitoring API/v1/monitoring/{health,metrics,diagnostics}固定 JSON schema,加字段自由,改 / 删要 major
Submit drivers内部接口 Submitter内部 unstable;CLI flags 是公开面
Cloud BuildHTTP REST (POST /jobs)同 Update server
Keel GoUX不算公开 API;终端用户体验

2. 依赖图(编译时 + 运行时)

                           host shell / Keel Go
                                      ↓ embeds
                                Keel SDK binary
                                ↑           ↓ runtime fetch
                      ┌─────────┴───┐   ┌───┴────────┐
                      │ Cloud Build  │  │  Update    │
                      │   server     │  │  server    │
                      └──────┬───────┘  └────┬───────┘
                             ↓ artifact      ↓ blob
                       ┌─────┴──────────────┴─────┐
                       │  OSS / S3 + CDN          │
                       └──────────────────────────┘
                                   ↑ submit upload
                            ┌──────┴────────┐
                            │ Submit drivers│
                            └────────────────┘

                            (CLI `keel submit ...`)

3. 谁可以独立替换 / 拆出去

模块独立性备注
SDK (sdk/)KeelView ABI 绑了 host bridge;改了所有消费者得重编
Module framework (modules-core/)所有 @keel-ai/* feature 包 + 所有 keel-module-* 都依赖;改 install API 是 ABI 事件
Feature packages (packages/<name>/)每个 npm 包独立 semver,可单独发版
Vendor modules (modules/keel-module-*/)每个独立 npm 包;scaffolder 产出形态
CLI (cli/)纯 npm 包,可单独发版
create-keel-project / -module (tools/)独立 npm 包,自带 templates
Update server (cloud/cmd/update-server)独立 Go 服务 + 独立 DB
Cloud Build server独立 Go 服务 + Docker daemon
Push server独立 Go 服务,前置极光 / 个推
Submit drivers每个 driver 独立 package
Keel Go (go/)独立 RN 项目;只 consume SDK 二进制
Keel Snack (snack/)独立 Next.js web app

4. 命名歧义对照表

文件 / 概念说什么
keel/docs/modules.mdKeel 维护的 5 个一等 npm module 的 spec(微信 / 支付宝 / 高德 / 极光 / 友盟)
keel/docs/source-modules.md本文:Keel 仓内自己的代码模块拓扑
keel/sdk/SDK 源码(iOS Swift + Android Kotlin + JNI)→ Keel.xcframework / keel-sdk.aar
keel/modules-core/Module framework:Swift Macros + KSP + KeelModule 基类 + KeelInstallContext + 跨平台 JSI 桥
keel/modules/create-keel-module 产出的国内一等模块(alipay/amap/push/umeng/wechat)
keel/packages/<name>/@keel-ai/* feature 包(constants/device/font/router/updates/…)
keel/apps/<name>/create-keel-project 产出的端用户 app(目前只有 keel-gallery)
keel/go/ / keel/snack/平台第一方 tester app(RN)+ playground(Next.js)
@keel-ai/keel (npm)用户安装的主库 umbrella(import { KeelSDK } from '@keel-ai/keel'),源码在 keel/sdk/
Keel.xcframework / keel-sdk.aarhost app 嵌入的 native 二进制 SDK artifact

修改本文

修改本文 = 修改架构事实。改之前请同步更新: