feat(packages): 内置 SDK 包并完善 ContextLoader 集成

- 将 ShrinkEventBus、ShrinkDataSaver 及其 EventBus 集成从 gitlink 转为仓库直接维护的完整 UPM 包,补齐运行时、编辑器工具、测试与文档
- 新增 Command 和 Network 的 App 集成组件,支持 ContextLoader 服务发布、可逆注销及 Network Loopback 生命周期管理
- 更新 Starter 与演示组合逻辑,缺失模块时可注册、已有兼容安装器时可覆盖,并补充宿主启动断言
- 升级内部包依赖与 Shared CodeGen 包定义,放宽 Integration.App 包的 Git 忽略规则
- 将独立服务器生成器改为基于已编译程序集的语义扫描,支持 partial、复杂泛型、命名冲突检测及模板 SHA-256 覆写保护
- 新增 Network 语义扫描、模板保护和 App 组件生命周期测试
- 新增真实 UPM 消费工程验证脚本,校验内部版本一致性、程序集加载及 EditMode 测试
- 重构当前架构文档并归档已完成的 Cordis 迁移与旧代码地图
This commit is contained in:
2026-08-18 18:06:34 +08:00
parent 517c4cf46e
commit d74c2f08ca
240 changed files with 13647 additions and 545 deletions
@@ -1,6 +1,6 @@
# ShrinkContext.AppAdapter
ShrinkApp ↔ ShrinkContext 的桥接层:把现有 `IShrinkAppModuleInstaller` 生态接入 Cordis 时空可组合性范式(阶段 2 过渡产物,方案见仓库根 `CORDIS_MIGRATION.md`
ShrinkApp ↔ ShrinkContext 的桥接层:提供当前默认的 ContextLoader 宿主、声明式组合 Profile、诊断工具,并保留 `IShrinkAppModuleInstaller` 兼容适配。当前架构与边界见仓库根 `DESIGN.md`
## 组成
@@ -62,11 +62,11 @@ Profile 的 JSON 结构如下:
| 依赖缺失 | 排序期抛错 | 安装器保持 Waiting,依赖出现自动激活 |
| 重复 ModuleId | 宿主级异常 | 构造期抛错(一致);运行期替换退化为供给冲突失败 |
| 运行中禁用模块 | 不支持(需重启) | `SetModuleDisabledAsync` 增量协调,重启用会重新执行安装器初始化 |
| `ShrinkApp.IsRunning` | Host 驱动 | `ShrinkAppLoaderHost.IsRunning` 为准(静态 IsRunning 为 false,过渡期已知差异) |
| `ShrinkApp.IsRunning` | Host 驱动 | LoaderHost 通过 `SetExternalHostRunning` 同步静态门面状态 |
## 已知边界
- `ShrinkAppServices` 无注销能力:安装器停用不撤回已注册服务(重新启用会重跑 RegisterServices,同键覆盖)
- `ShrinkAppServices.TryUnregister(instance)` 支持按实例撤回服务;原生 Context 组件已使用该路径。旧 installer 包装器仍取决于安装器自身是否提供完整逆操作
- config/isolate 变化走条目重建;intercept metadata 可原位更新而不改变 fiber generation。
- 运行中不支持重新应用整份 Profile;资产修改在下一次宿主启动生效,运行中模块开关仍使用 `SetModuleDisabledAsync`
- Editor 基准的毫秒数和 GC 管理堆差值只用于同机前后对比;自动测试只断言索引候选规模和事务恢复结果。
@@ -14,8 +14,8 @@ namespace ShrinkContext.AppAdapter
/// - provide 发布模块键 <c>app.module.&lt;ModuleId&gt;</c>(安装器 Active 后对依赖者可见);
/// - apply 依次执行 RegisterServices + InitializeAsyncconfig 必须传入 <see cref="ShrinkAppServices"/>。
///
/// 已知边界(后续阶段补齐):ShrinkAppServices 尚无注销能力,
/// 安装器卸载时不会移除已注册的服务;重新激活会重复执行 RegisterServices(同键覆盖)
/// 兼容安装器只负责执行既有 RegisterServices + InitializeAsync。需要停用时撤回服务的模块应使用
/// 原生 Context 组件,并通过 ShrinkAppServices.TryUnregister(instance) 登记对应逆操作
/// </summary>
public sealed class ShrinkAppInstallerComponent : IShrinkComponent
{
@@ -17,7 +17,7 @@ namespace ShrinkContext.AppAdapter
/// <summary>
/// Starter/组合包在 SubsystemRegistration 阶段设置的默认装配表。
/// AppAdapter 保持不依赖具体业务模块,组合根负责原生组件挂到已发现的模块 id。
/// AppAdapter 保持不依赖具体业务模块,组合根负责注册原生组件;若兼容 installer 已被发现则覆盖同 id。
/// </summary>
public static System.Action<ShrinkAppLoaderHost>? DefaultComposition { get; set; }
@@ -6,7 +6,7 @@
"unity": "2022.3",
"dependencies": {
"com.cneicy.shrink-context-core": "0.1.0",
"com.cneicy.shrink-app-core": "0.1.0",
"com.cneicy.shrink-app-core": "0.1.1",
"com.cysharp.unitask": "2.5.10"
},
"keywords": [
@@ -20,4 +20,4 @@
"name": "cneicy",
"url": "https://github.com/cneicy"
}
}
}