Admin Portal

# 把新增模型与导入帐号收进同一套入口

这个入口不再把“新增模型供应商”和“导入供应商帐号”拆散在不同地址。当前版本统一从 `/portal/admin/` 进入：一边看 pack/provider 目录、做 preview/import，一边继续保留 item 级 `reused / reactivated / replaced` 的 batch-import 结果面板。

- 默认同域走 `/portal-admin-api/`
- 静态页与 CRM API 解耦
- 保留旧地址兼容，不打断现有操作

统一入口
/portal/admin/
Logical Group
/logical-groups
Provider 目录
/providers
Batch Import
/batch-import

## 逻辑分组 / 路由

这页给插件前置路由使用，负责维护 `logical_group`、`public_model`、 `route` 与 `shadow_host_id / shadow_group_id` 的关系。当前首版已经能直接调 `/api/logical-groups` 系列接口，适合先把 canonical shadow route 收进统一管理面。

打开逻辑分组页

- 适用动作 创建 logical group、绑定 public model、维护 route 与 shadow group 映射。
- 默认 API Base `https://sub.tksea.top/portal-admin-api`

## 新增模型 / 供应商目录

这页负责浏览已安装 pack、选择 provider、调用 `preview-import` / `import`，同时提供 provider manifest 草稿生成与发布。当前版本已经支持先保存草稿，再经由 CRM 服务端写入 pack/provider 文件并自动提交到仓库。

打开供应商页 跳到 manifest 草稿

- 适用动作 查看 pack 与 provider、输入 keys 做 preview/import、生成 provider 草稿，并一键发布到仓库。
- 默认 API Base `https://sub.tksea.top/portal-admin-api`

## 导入供应商帐号

这页继续负责 live batch-import：创建 run、拉取 run summary、查看 item 级别的 `matched_account_state` 与 `account_resolution`。

打开导入页 旧地址兼容入口

- 适用动作 批量导入第三方 key，验证 `reused / created / reactivated / replaced`。
- 默认 API Base `https://sub.tksea.top/portal-admin-api`

可立即使用
逻辑分组 + Provider 导入

依赖现有 `/api/logical-groups`、`/api/packs`、`/api/providers/*`、`/api/batch-import/*` 即可完成。

当前边界
浏览器提交到 CRM，再由 CRM 写仓库

页面不会直接拼 Git 命令；所有写 pack/provider 与提交仓库的动作，都统一走 CRM 服务端的发布接口。

安全前提
仍需 Admin Token

CRM 的 API 权限仍由 Bearer token 控制，同域反代只解决浏览器可达性，不降低鉴权门槛。