Submodules & Source Map
Git submoduleとモノレポworkspaceの役割、仕様の読み分け方。
Git submodule(4つ)
外部リポジトリを参照するのは次の4つです。いずれも git clone --recurse-submodules で取得できます。
| Path | Repository | 責務 |
|---|---|---|
Vyline/packages/protocol | tqmane/vyline-api | LINE protocol, login, E2EE, RPC, domain facade |
Vyline/packages/plugin | tqmane/vyline-plugin | plugin SDK / examples / permission model |
Vyline/packages/themes | tqmane/vyline-theme | VyTheme型とpreset |
tools | tqmane/vyline-search | Desktop LINE version追跡、unpack、xref、decompile補助 |
Vyline/packages/ 配下は全部がサブモジュールというわけではなく、line-types(Thrift型のvendored定義)、types / loose-types、cli / vyl / create-plugin、ios-backup など、モノレポ本体で管理するworkspace packageも並んでいます。「4 submodules」という表現は外部リポジトリを指すものだけを数えたものです。
Protocol
LINE通信仕様を調べるときの中心です。公開APIは src/index.ts、機能→調査地図は src/modules.map.ts、RPC対応表はsrc/dictionary/rpcMap.tsです。
| Protocol内 | 役割 |
|---|---|
stack/ | Thrift RPC、Talk/Login等の低レベル通信 |
src/login/ | QR/Email/Token、Desktop transport patch、E2EE identity |
src/domain/ | Profile/Contacts/Chat/TalkのBackend向けfacade |
src/dictionary/rpcMap.ts | Desktop evidence → path → stack/domain/backendの対応 |
src/modules.map.ts | 機能単位の関連source・Desktop検索ヒント |
src/updater/ / src/desktop/ | Desktop profile、version/header更新追従 |
Backendはworkspace dependencyとして@vyline/protocolを使います。Protocol単体checkoutだけでは@vyline/line-types/@vyline/loose-types等の兄弟workspace dependencyが必要になるため、通常はこのモノレポから開発します。
Plugin
submoduleにはSDKとexamplesを置き、メインリポジトリのBackendがruntimeを持ちます。@vyline/plugin-sdk は definePlugin、manifest、permission、context/eventの型を提供します。
Vyline/packages/plugin (submodule)
└─ sdk: public contract / examples
↓ workspace import
Vyline/backend/src/line/pluginManager.ts
├─ discover / enabled state
└─ pluginRuntime.ts
├─ activate / deactivate
├─ permission-aware context
└─ handler isolation
permission文字列が存在することと、すべてのcapabilityがruntimeで実装済みであることは同義ではありません。SDK型とBackend contextの両方を確認します。
Themes
THEME_PRESETS と VyTheme 型を提供します。色だけでなくsurface/sidebar/message/radius/chat background/pattern等をtokenとして一式持ち、Frontendはpresetを直接ハードコードせずtheme contractとして扱います。
Tools
Desktop LINEの更新でProtocol側の前提を確認するときに使います。version check/update、Themida unpack、文字列・xref検索、Ghidra decompile補助を持ちます。実装対象を決める資料であり、Vyline本番serverへ同梱して動かすruntime dependencyではありません。
| root script | 用途 |
|---|---|
bun run vyline:check | installed/running/latest version比較 |
bun run vyline:update | Desktop更新 |
bun run vyline:unpack | 対象LINE.exeのunpack |
bun run vyline:find-native -- <name> | string/xref/decompile経路でnative実体を探す |
bun run vyline:delta | Protocol側feature mapから更新差分を絞る |
変更先を決める
| 変更 | commitするrepository | メイン側で必要なこと |
|---|---|---|
| LINE RPC/E2EE/login | tqmane/vyline-api | submodule pointer更新 + integration test |
| Plugin SDK | tqmane/vyline-plugin | Backend runtimeとの互換確認 + pointer更新 |
| Theme preset/type | tqmane/vyline-theme | Frontendでrender確認 + pointer更新 |
| Desktop解析tool | tqmane/vyline-search | root scriptsから動作確認 + pointer更新 |
| Backend/UI/storage | メインtqmane/vyline | 通常のworkspace変更 |
submodule内で修正しただけではメインrepositoryが新commitを参照しません。submodule側のcommitを作成した後、メイン側でそのcommitへのpointer差分を明示的に更新します。
Clone
git clone --recurse-submodules https://github.com/tqmane/vyline.git
cd vyline
git submodule status
既存cloneで空なら:
git submodule update --init --recursive
現在参照しているcommitはgit submodule status、変更の有無はgit status --shortで確認します。単にsubmodule内でgit pullしただけでは、メイン側の再現可能な参照commitは更新されません。