# Backend TypeScript 迁移计划

最后更新：2026-05-21

## 结论

当前后端不建议整体重写为 Go。

更合适的路线是：

1. 保留 Node.js + Express + Playwright + PostgreSQL 主栈
2. 先把后端渐进迁移到 TypeScript
3. 同时拆分超大 service 文件
4. 补足核心业务链路测试

这样可以先解决“可维护性”和“改动风险”问题，而不会额外引入一次高成本的跨语言重写。

## 为什么现在不直接重写 Go

当前后端的主要复杂度并不来自语言本身，而是来自：

- 订单、任务、库存、领取、自动发货、webhook 多条链路同时演进
- Playwright 浏览器自动化本身就天然偏 Node 生态
- 若整体换成 Go，浏览器自动化大概率仍需保留 Node worker
- 这样会把系统变成 Go + Node + Python 三段式，边界更多，联调更难

所以现阶段最有效的动作，不是换语言，而是先把现有 Node 后端“类型化、分层化、可测试化”。

## 当前主要维护痛点

从当前仓库状态看，风险主要集中在：

- 少数超大编排文件已经承担过多职责
  - `apps/backend/src/services/admin/admin-service.js`
  - `apps/backend/src/services/claim/claim-session-service.js`
  - `apps/backend/src/services/order/webhook-service.js`
  - `apps/backend/src/services/session/session.js`
- 领域对象靠运行时约定在 routes / services / repositories 之间传递
- 当前自动化测试覆盖还偏薄，跨链路改动缺少回归保护

## 迁移目标

本次迁移不是为了“全部改成 .ts 才算完成”，而是为了达到下面几个目标：

1. 让核心领域对象具备稳定的静态类型
2. 让新增改动优先进入类型系统，而不是继续扩大纯 JS 面积
3. 让超大 service 文件拆分时有类型边界可依赖
4. 让 typecheck 和测试一起成为后端的标准校验步骤

## 分阶段计划

### 阶段 1：建立类型基础设施和构建链路

目标：

- 引入后端 `tsconfig`
- 引入后端 `tsc -> dist` 构建链路
- 开发和测试改为通过 `tsx` 支持 JS/TS 混合源码
- 增加 `npm run typecheck`
- 先从最核心的共享配置和基础领域对象开始建类型
- 生产 Docker 镜像运行编译后的 `dist`

范围：

- `runtimeConfig`
- 公共配置对象
- 后续会继续补：
  - admin DTO
  - order / task / inventory 基础类型
  - webhook 解析结果类型

验收标准：

- 后端可以执行 `npm run typecheck`
- 后端可以执行 `npm run build`
- `npm run dev` 继续运行源码，`npm run start` 运行 `dist/index.js`
- Docker 开发环境继续热更新，生产镜像只复制编译产物和运行依赖

### 阶段 2：按领域拆分超大 service

目标：

- 保持运行逻辑不变
- 先把“巨石编排文件”拆成更小的用例编排模块

建议拆分顺序：

1. `admin-service.js`
   - `admin-order-service`
   - `admin-task-service`
   - `admin-inventory-service`
   - `admin-webhook-service`
2. `claim-session-service.js`
   - `claim-session-lifecycle`
   - `claim-role-service`
   - `claim-redeem-orchestrator`
3. `webhook-service.js`
   - `webhook-parse`
   - `webhook-validate`
   - `webhook-process`

### 阶段 3：扩大类型覆盖

目标：

- 新增模块优先使用 `.ts`
- 旧模块逐步迁移，而不是一次性全改
- 让 routes / services / repositories 之间共享同一套领域类型

建议优先顺序：

1. `src/types/` 下沉淀共享领域模型
2. repository 返回值显式类型化
3. service 入参 / 出参类型化
4. 再迁移最稳定的新模块到 `.ts`

### 阶段 4：补核心回归测试

优先补这些主链路：

1. webhook 入单与重放
2. 库存预占 / 释放 / 换码
3. claim 会话创建 / 关闭 / 切换
4. 腾讯兑换结果分类
5. 自动发货触发条件

## 已开始执行的第一步

本轮已经落地：

1. backend 新增 `tsconfig.json`
2. backend 新增 `npm run typecheck`
3. 新增 `src/types/runtime-config.js`
4. `src/config/runtime.js` 已接入第一批类型检查
5. 新增 `src/types/admin-read-models.js`
6. `src/services/admin/admin-service.js` 的订单 / 任务 / 库存 / webhook 读取返回模型已接入第二批类型检查
7. 新增 `src/types/repository-rows.js`
8. `admin-service.js` 的核心读取映射函数参数，已开始明确依赖 repository 行模型
9. `order / task / inventory / webhook / order-item / task-inventory-binding` repository 已补第一批返回类型
10. backend `tsconfig.json` 已将上述 repository 纳入显式 `typecheck` 范围
11. `npm --prefix apps/backend run typecheck` 已在 repository 扩围后通过
12. 新增 `src/types/repository-inputs.js`
13. `order / task / inventory / webhook / order-item` repository 已开始显式使用共享输入类型
14. `npm --prefix apps/backend run typecheck` 已在输入类型接入后继续通过
15. 新增 `src/services/admin/admin-read-service.js`，开始承接后台查询型接口
16. `orders / tasks / inventory / webhook-events` 管理路由已优先切到 `admin-read-service`
17. 读服务首轮拆分后，backend `typecheck` 继续通过
18. 新增 `src/services/admin/admin-read-helpers.js`，开始承接读侧共享 helper
19. `admin-read-service.js` 已改为优先依赖 `admin-read-helpers.js`，不再直接依赖 `admin-service.js`
20. helper 下沉后，backend `typecheck` 继续通过
21. `admin-service.js` 已开始复用 `admin-read-helpers.js`，并删除首批重复的读侧 helper
22. `order / task / inventory / webhook` repository 已补共享查询参数类型
23. `npm --prefix apps/backend run typecheck` 已在查询参数类型接入后继续通过
24. 新增 `src/types/admin-read-inputs.js`，开始承接后台读接口的 service 入参边界
25. `admin-read-service.js` 的订单 / 任务 / 库存 / webhook 查询与详情入口已接入共享输入类型
26. `npm --prefix apps/backend run typecheck` 已在 service 输入类型接入后继续通过
27. 新增 `src/services/admin/admin-write-service.js`，开始承接后台库存写接口
28. `inventory` 管理路由已切到 `admin-write-service`，`admin-service.js` 删除首批库存写侧实现
29. 新增 `src/types/admin-write-inputs.js`，库存写接口已开始复用共享输入类型
30. backend `typecheck` 已覆盖 `admin-write-service.js`
31. 新增 `src/types/admin-write-models.js`，库存写接口返回结构已接入共享响应类型
32. `admin-write-service.js` 的 create / import / release / invalidate 已补返回值 JSDoc
33. `webhook replay` 与 `Agiso 店铺配置保存` 已下沉到 `admin-write-service.js`
34. `webhook-events / platform-config` 写路由已切到 `admin-write-service`
35. `admin-service.js` 删除第二批可独立的写侧实现，并保留兼容导出
36. `task` 生命周期写操作第一批已下沉到 `admin-write-service.js`
37. `tasks` 管理路由已切换首批 task 写接口到 `admin-write-service`
38. 新增 task 写侧共享响应类型，task action / binding release 已接入 JSDoc
39. `retryAdminTask` 与 `completeAdminTaskManualDispatch` 已下沉到 `admin-write-service.js`
40. `tasks` 管理路由已全部切到 `admin-write-service` 承接 task 写接口
41. `admin-service.js` 已删除 task 写侧主体实现，仅保留兼容导出
42. 新增 `admin-platform-config-service.js`，开始承接 platform-config 整块能力
43. `platform-config` 路由已切换到独立 service，不再经过 `admin-service.js`
44. `admin-service.js` 已删除平台配置相关读写与 helper，实现进一步收敛
45. 新增 `admin-dashboard-service.js`，后台概览已独立
46. 新增 `admin-message-delivery-service.js`，消息发送记录查询已独立
47. `dashboard / message-deliveries` 路由已直接依赖独立 service
48. `admin-service.js` 已收敛为兼容导出层，不再直接承载后台业务实现
49. 后台读 / 写 / 平台配置 / 概览 / 消息记录已分散到独立 service 模块
50. 新增 `src/types/admin-route-inputs.js`，开始承接 `admin` 路由层的 query / body / params 共享输入边界
51. `dashboard / inventory / orders / tasks / platform-config / message-deliveries / webhook-events` 路由已显式接入 `@ts-check` 与共享路由输入类型
52. `src/routes/admin/shared.js` 已补齐通用 handler 的请求 / 审计签名，`adminSession` 扩展请求字段进入路由层类型检查
53. 后台 `admin` 路由层首批已纳入 backend `typecheck` 范围，并验证通过
54. 新增 `src/services/admin/admin-read-shared-helpers.js`，开始承接 viewer / task context / 权限判定 / 订单展示等跨读写共享 helper
55. `admin-read-service / admin-write-service / admin-platform-config-service / admin-service` 已改为优先依赖共享 helper 模块，`admin-read-helpers.js` 职责继续收敛
56. `npm --prefix apps/backend run typecheck` 已在共享 helper 拆分后继续通过
57. 新增 `src/services/admin/admin-task-read-helpers.js`，开始承接任务映射、binding summary、任务动作 payload 与订单绑定汇总
58. `admin-read-service / admin-write-service / admin-service` 已将 task 相关 helper 改为直接依赖独立 task helper 模块
59. `admin-read-helpers.js` 已进一步收敛到 webhook / inventory / order-list 三类能力
60. `npm --prefix apps/backend run typecheck` 已在 task helper 拆分后继续通过
61. `admin-read-helpers.js` 已完成最终拆分，并删除过渡文件
62. 新增 `src/services/admin/admin-inventory-read-helpers.js`，库存读取映射与必需实体校验已独立
63. 新增 `src/services/admin/admin-order-read-helpers.js` 与 `src/services/admin/admin-webhook-read-helpers.js`，订单列表汇总与 webhook 事件映射已按领域独立
64. `admin-read-service / admin-write-service / admin-service` 已全部改为直接依赖 inventory / order / webhook / task / shared 五类 helper，读侧 helper 拆分阶段可以收口

## 2026-05-21 执行进展

本轮已落地：

1. 新增 `tsconfig.build.json`
2. `npm run build` 输出 `dist`，并复制数据库 migration SQL
3. `npm run dev` 改为 `tsx watch --clear-screen=false src/index.ts`
4. `npm test` 改为 `node --import tsx --test ...`
5. `npm run db:migrate` 改为 `tsx src/db/migrate.ts`
6. `npm run start` 改为 `node dist/index.js`
7. 生产 Dockerfile 改为 builder 阶段编译，runtime 阶段复制 `dist`
8. 新增 `tsx` 和 `@types/pg`
9. 首批真实源码迁移到 `.ts`：
   - `src/db/client.ts`
   - `src/utils/time.ts`
   - `src/utils/random.ts`
   - `src/utils/money.ts`
   - `src/utils/json.ts`
   - `src/repositories/claim-token-repo.ts`
   - `src/repositories/task-event-repo.ts`
   - `src/repositories/admin-audit-log-repo.ts`
10. Docker 内验证通过：
   - `npm run typecheck`
   - `npm run build`
   - `npm test`
11. `src/types/*.js` 已改写为真正的 `.ts` 类型导出文件，现有 JS JSDoc `import('...js').TypeName` 引用保持可用
12. 低风险 repository 第二批已迁移到 `.ts`：
    - `src/repositories/order-item-repo.ts`
    - `src/repositories/message-delivery-repo.ts`
    - `src/repositories/webhook-event-repo.ts`
13. `MessageDeliveryRow` 与列表查询结果已进入共享 repository row 类型
14. 小型 repository 第三批已迁移到 `.ts`：
    - `src/repositories/admin-user-repo.ts`
    - `src/repositories/product-match-rule-repo.ts`
    - `src/repositories/fulfillment-profile-repo.ts`
15. repository 第四批已迁移到 `.ts`：
    - `src/repositories/order-repo.ts`
    - `src/repositories/task-inventory-binding-repo.ts`
16. 核心库存 repository 已迁移到 `.ts`：
    - `src/repositories/inventory-repo.ts`
17. 核心任务 repository 已迁移到 `.ts`：
    - `src/repositories/task-repo.ts`
18. `TaskRow` 已补齐任务读取链路实际使用的主表、领取 token、腾讯上下文、库存绑定字段
19. 核心 repository 迁移阶段已收口，Docker 内 `typecheck / build / test` 继续通过
20. `runtime.js` 已拆分并迁移到 `.ts`：
    - `src/config/runtime.ts`
    - `src/config/runtime-env.ts`
    - `src/config/runtime-merge.ts`
21. env 文件加载、env 值解析、默认配置加载、深合并逻辑已从 runtime 主入口分离
22. Docker 内再次验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test`
23. 高风险链路补测试：
    - webhook 事件入库 payload 可稳定保留原始 headers/query/body，便于后续 replay
    - 库存换码在“兑换码已使用且无替换库存”时进入等待库存状态，并记录已使用事件
    - Agiso 自动发货成功标记可从字符串 context 中识别，且会忽略无效 JSON
24. Docker 内验证通过：
    - 相关 3 个测试文件共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 125 个用例通过
25. 服务层首批迁移到 `.ts`：
    - `src/services/order/inventory-service.ts`
26. 库存服务的 reserve/release 输入、依赖注入函数、返回库存行已显式类型化
27. Docker 内验证通过：
    - `src/services/order/inventory-service.test.js` 共 5 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 125 个用例通过
28. claim 换码服务迁移到 `.ts`：
    - `src/services/claim/session/redeem.ts`
29. 换码流程的上下文、腾讯兑换返回、分类结果、尝试记录、错误状态、依赖注入函数已显式类型化
30. Docker 内验证通过：
    - claim 换码相关 2 个测试文件共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 125 个用例通过
31. 订单 upsert 服务迁移到 `.ts`：
    - `src/services/order/order-service.ts`
32. 外部订单事件、订单履约商品、订单状态合并结果、upsert 返回结构已显式类型化
33. Docker 内验证通过：
    - 订单 / webhook / open91 相关 3 个测试文件共 15 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 125 个用例通过
34. 商品匹配服务迁移到 `.ts`：
    - `src/services/order/product-match-service.ts`
35. 外部商品 item、匹配候选、解析后的履约商品、店铺候选与配置读取已显式类型化
36. Docker 内验证通过：
    - 商品匹配 / 订单 / webhook / bootstrap 相关 4 个测试文件共 13 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 125 个用例通过
37. delivery task 服务迁移前补直接测试：
    - 新增 `src/services/order/delivery-task-service.test.js`
    - 新增 `syncDeliveryTasksForOrderWithDeps`，便于隔离 repository / 库存 / claim token / 通知依赖
    - 覆盖库存不足进入 `waiting_inventory`、人工履约进入 `manual_review`、快手云任务生成 claim token 三个关键分支
38. Docker 内验证通过：
    - `src/services/order/delivery-task-service.test.js` 共 3 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 128 个用例通过
39. delivery task 服务迁移到 `.ts`：
    - `src/services/order/delivery-task-service.ts`
40. 订单行、订单商品、履约 profile / requirement、依赖注入、任务上下文、JSON 配置读取已显式类型化
41. Docker 内验证通过：
    - delivery task / 订单 / webhook / open91 相关 4 个测试文件共 18 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 128 个用例通过
42. claim 基础服务迁移到 `.ts`：
    - `src/services/claim/claim-service.ts`
43. 领取 token 创建与 claim URL 生成已显式类型化，并在 token 写入失败时显式抛错
44. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 128 个用例通过
45. Agiso 自动发货服务迁移前补直接测试：
    - 新增 `ensureAgisoXianyuAutoDeliveryForDeliveredTaskWithDeps`，便于隔离 task repository、HTTP 请求、发货确认与消息通知依赖
    - 覆盖订单下仍有任务未交付时跳过、配置缺失时记录 `skipped`、接口受理但未确认发货时记录 `failed` 三个关键分支
46. Docker 内验证通过：
    - `src/services/platforms/agiso/xianyu/auto-delivery-service.test.js` 共 9 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 131 个用例通过
47. Agiso 自动发货服务迁移到 `.ts`：
    - `src/services/platforms/agiso/xianyu/auto-delivery-service.ts`
48. 自动发货订单 / 任务形态、依赖注入、HTTP 响应、发货确认结果、上下文落库 payload 已显式类型化
49. `tsconfig.json` 已将 Agiso 新增 `.ts` 文件纳入 `typecheck`，旧 Agiso `.js` 文件继续暂时排除
50. Docker 内验证通过：
    - `src/services/platforms/agiso/xianyu/auto-delivery-service.test.js` 共 9 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 131 个用例通过
51. Agiso 消息发送服务迁移到 `.ts`：
    - `src/services/platforms/agiso/xianyu/message-service.ts`
52. 消息订单 / 任务、消息配置、模板渲染、去重查询、发送请求、delivery 创建与更新 payload 已显式类型化
53. Docker 内验证通过：
    - `src/services/platforms/agiso/xianyu/message-service.test.js` 共 3 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 131 个用例通过
54. Agiso 订单详情服务迁移前补直接测试：
    - 新增 `src/services/platforms/agiso/xianyu/order-detail-service.test.js`
    - 新增 `enrichAgisoXianyuTradeOrderWithDeps` 与 `queryAgisoXianyuOrderDetailWithDeps`，便于隔离订单详情 HTTP 请求
    - 覆盖发货状态识别、详情成功解析、业务失败、缺配置跳过、详情补全 webhook 订单五个关键分支
55. 修复 Agiso 店铺配置白名单：
    - `tradeDetailApiVersion`
    - `tradeDetailTimeoutMs`
56. Docker 内验证通过：
    - `src/services/platforms/agiso/xianyu/order-detail-service.test.js` 共 5 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 136 个用例通过
57. Agiso 订单详情服务迁移到 `.ts`：
    - `src/services/platforms/agiso/xianyu/order-detail-service.ts`
58. 订单详情补查入参、依赖注入、HTTP 响应、详情查询结果、发货状态、店铺配置、外部 SKU 解析结果已显式类型化
59. Docker 内验证通过：
    - `src/services/platforms/agiso/xianyu/order-detail-service.test.js` 共 5 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 136 个用例通过
60. Agiso 店铺配置服务迁移到 `.ts`：
    - `src/services/platforms/agiso/shop-config-service.ts`
61. Agiso 店铺配置文档、默认消息模板、店铺 token/API 配置、配置 map 归一化结果已显式类型化
62. Docker 内验证通过：
    - Agiso 配置 / 自动发货 / 消息 / 订单详情相关 5 个测试文件共 26 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 136 个用例通过
63. webhook service 迁移前补编排测试：
    - 新增 `executeAgisoTradeWebhookWithDeps`，便于隔离 webhook event repository、商品匹配、订单 upsert 与订单详情补查依赖
    - 覆盖验签失败落错误、未配置商品提前忽略、咸鱼订单补查后 upsert 三个关键分支
64. Docker 内验证通过：
    - `src/services/order/webhook-service.test.js` 共 9 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
65. webhook service 迁移到 `.ts`：
    - `src/services/order/webhook-service.ts`
66. webhook 编排依赖注入边界已补最小类型，入口编排、解析、验签、忽略、补查、upsert 逻辑已进入 TypeScript 编译链路
67. Docker 内验证通过：
    - `src/services/order/webhook-service.test.js` 共 9 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
68. Agiso webhook 解析基础模块迁移到 `.ts`：
    - `src/services/order/agiso-trade-parsing.ts`
69. Agiso webhook 原始 payload、订单号解析、商品来源数组提取已显式类型化
70. Docker 内验证通过：
    - `src/services/order/agiso-trade-parsing.test.js` 与 `src/services/order/webhook-service.test.js` 共 12 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
71. 腾讯浏览器会话兑换服务迁移到 `.ts`：
    - `src/services/session/session-redeem.ts`
72. 会话兑换编排、验证码截图 / OCR payload、页面提交、弹窗结果解析、兑换结果分类已补轻量结构类型；`tsconfig.json` 已将 session 新增 `.ts` 文件纳入 `typecheck`，旧 session `.js` 文件继续暂时排除
73. Docker 内验证通过：
    - `src/services/session/session-redeem.test.js` 共 6 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
74. 腾讯浏览器会话 proof 基础模块迁移到 `.ts`：
    - `src/services/session/session-proof-constants.ts`
    - `src/services/session/session-proof-paths.ts`
    - `src/services/session/session-proof-mode.ts`
    - `src/services/session/session-proof-beijing-time.ts`
75. 兑换凭证模式、artifact 路径、北京时间截图浏览器上下文与截图返回值已显式类型化
76. Docker 内验证通过：
    - `src/services/session/session-proof.test.js` 共 4 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
77. 腾讯浏览器会话 proof 渲染 / 结果写入模块迁移到 `.ts`：
    - `src/services/session/session-proof-html.ts`
    - `src/services/session/session-proof-renderer.ts`
    - `src/services/session/session-proof-result-writer.ts`
78. 凭证 HTML 输入、结果 JSON payload、浏览器截图合成上下文、页面弹窗渲染已显式类型化
79. Docker 内验证通过：
    - `src/services/session/session-proof.test.js` 共 4 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
80. 腾讯浏览器会话 proof 总编排迁移到 `.ts`：
    - `src/services/session/session-proof.ts`
81. 兑换凭证保存入口、基础 / 完整 proof 分支、北京时间截图降级路径、artifact 返回值已显式类型化
82. Docker 内验证通过：
    - `src/services/session/session-proof.test.js` 共 4 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
83. 腾讯浏览器会话配置 / 状态 / payload 纯逻辑模块迁移到 `.ts`：
    - `src/services/session/session-browser-config.ts`
    - `src/services/session/session-state.ts`
    - `src/services/session/session-payload.ts`
84. 登录类型、浏览器启动参数、默认视口、会话状态 / notice、二维码 TTL、redeem/review/artifact payload 已显式类型化；`buildSessionPayload` 对外暂保留动态返回以兼容仍未迁移的 JS 路由与 session 编排
85. Docker 内验证通过：
    - `src/services/session/session.test.js` 共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
86. 腾讯浏览器会话 cookie / review / 登录共享 / 服务配置模块迁移到 `.ts`：
    - `src/services/session/session-cookie-map.ts`
    - `src/services/session/session-review.ts`
    - `src/services/session/session-login-shared.ts`
    - `src/services/session/session-service-config.ts`
87. cookie map、review 签名与截图、二维码下载、frame 等待、浏览器会话配置常量已显式类型化
88. Docker 内验证通过：
    - `src/services/session/session.test.js` 共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
89. 腾讯浏览器会话 OCR / browser runtime 模块迁移到 `.ts`：
    - `src/services/session/ocr.ts`
    - `src/services/session/session-service-runtime.ts`
90. OCR HTTP payload / 响应、OCR 超时、浏览器预热、Playwright browser promise 生命周期、SessionServiceError 已显式类型化
91. Docker 内验证通过：
    - `src/services/session/session.test.js` 与 `src/services/session/session-redeem.test.js` 共 20 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
92. 腾讯浏览器会话内存 store 模块迁移到 `.ts`：
    - `src/services/session/session-service-store.ts`
93. 浏览器会话对象、注册入参、关闭依赖、自动关闭 timer、session 状态持久化 payload 已显式类型化
94. Docker 内验证通过：
    - `src/services/session/session.test.js` 共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
95. 腾讯浏览器会话页面模块迁移到 `.ts`：
    - `src/services/session/session-page.ts`
96. 二维码截图重试、登录 tab 切换、host 状态提取、页面刷新、QQ/WX 二维码状态分发已显式类型化
97. Docker 内验证通过：
    - `src/services/session/session.test.js` 共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
98. 腾讯浏览器 QQ 登录模块迁移到 `.ts`：
    - `src/services/session/session-qq.ts`
99. QQ 登录 iframe、二维码 URL 提取 / 升级、远程下载 fallback、二维码 locator 与扫码状态已显式类型化
100. Docker 内验证通过：
    - `src/services/session/session.test.js` 共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
101. 腾讯浏览器 WX 登录模块迁移到 `.ts`：
    - `src/services/session/session-wx.ts`
102. WX 登录 iframe、快捷登录切换、二维码候选状态、远程下载 fallback、二维码 locator 与扫码状态已显式类型化
103. Docker 内验证通过：
    - `src/services/session/session.test.js` 共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
104. 腾讯浏览器会话 activity 信息模块迁移到 `.ts`：
    - `src/services/session/session-activity.ts`
105. 活动角色 / 表单 / 验证码 / 弹窗信息结构、登录态 presentation 同步、角色渲染触发与轮询已显式类型化
106. Docker 内验证通过：
    - `src/services/session/session.test.js` 共 14 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
107. 腾讯浏览器会话主编排迁移到 `.ts`：
    - `src/services/session/session.ts`
108. 会话创建 / 刷新 / 重载 / 兑换 / 关闭入口已进入 TS 编译链路，`session-service-store.ts` 补齐主编排所需 browser context、page 与 presentation sync 字段类型
109. `tsconfig.json` 已移除 `src/services/session/**/*.js` 排除项；除测试文件外，`src/services/session` 服务目录已全量纳入 TS 编译
110. Docker 内验证通过：
    - `src/services/session/session.test.js`、`src/services/session/session-redeem.test.js`、`src/services/session/session-proof.test.js` 共 24 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
111. 领取会话服务入口与分层模块迁移到 `.ts`：
    - `src/services/claim/claim-session-service.ts`
    - `src/services/claim/session/actions.ts`
    - `src/services/claim/session/context.ts`
    - `src/services/claim/session/lifecycle.ts`
    - `src/services/claim/session/runtime.ts`
    - `src/services/claim/session/shared.ts`
112. 领取上下文、会话生命周期、任务同步、角色确认、兑换入口与领取详情 payload 已进入 TS 编译链路；`lifecycle/runtime` 补齐动态 payload / patch 对象类型
113. Docker 内验证通过：
    - `src/services/claim/claim-session-service.test.js` 共 2 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
114. 快手 Cloud 领取页动作与轮询同步模块迁移到 `.ts`：
    - `src/services/claim/kuaishou-cloud-claim-service.ts`
    - `src/services/claim/kuaishou-cloud-sync-service.ts`
115. 快手 Cloud 核销码校验、指引图片路径、角色确认、领取页兑换触发与领取页轮询补同步已进入 TS 编译链路；核销 payload 补齐动态对象类型
116. Docker 内验证通过：
    - `src/services/claim/claim-session-service.test.js` 共 2 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
117. 订单履约配置模块迁移到 `.ts`：
    - `src/services/order/fulfillment-binding-config-service.ts`
    - `src/services/order/kuaishou-cloud-fulfillment-config-service.ts`
118. 订单履约绑定过滤、快手 Cloud 配置读取 / 保存 / 映射到履约绑定已进入 TS 编译链路；默认动态配置对象补齐类型
119. Docker 内验证通过：
    - `src/services/order/fulfillment-binding-config-service.test.js`、`src/services/order/kuaishou-cloud-fulfillment-config-service.test.js` 共 3 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
120. 后端 HTTP / 日志工具迁移到 `.ts`：
    - `src/utils/http.ts`
    - `src/utils/logger.ts`
121. 路由响应 payload、HTTP 错误分类 / 扩展字段、日志级别 / 文件名 / 过期清理 / 错误序列化已进入 TS 编译链路；`HttpErrorLike` 改为显式导出类型，logger 使用 type-only import 避免运行时循环依赖
122. Docker 内验证通过：
    - `src/utils/logger.test.js` 共 7 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
123. 91卡券 Open API 共享模块迁移到 `.ts`：
    - `src/services/open-91/shared.ts`
124. 91 卡券配置读取、请求归一化、签名 / 验签、cards AES 加密、卡密响应构造与查询状态解析已进入 TS 编译链路；动态配置与请求 payload 补齐对象类型
125. Docker 内验证通过：
    - `src/services/open-91/shared.test.js` 共 6 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
126. 91卡券 Open API 下单 / 查询入口迁移到 `.ts`：
    - `src/services/open-91/order-create-service.ts`
    - `src/services/open-91/order-query-service.ts`
127. 91 卡券创建订单、待补配置队列、订单查询、领取链接 cards 生成与查询日志已进入 TS 编译链路
128. Docker 内验证通过：
    - `src/services/open-91/shared.test.js` 共 6 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
129. 91卡券平台订单服务迁移到 `.ts`：
    - `src/services/platforms/ninetyone/order-service.ts`
130. 91 卡券 source event 构造、待补配置订单落库、后台重试 / 手动失败、后台订单列表映射已进入 TS 编译链路；动态 payload / config 与 SQL 参数数组补齐类型
131. Docker 内验证通过：
    - `src/services/platforms/ninetyone/order-service.test.js`、`src/services/open-91/shared.test.js` 共 7 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
132. 履约目录初始化服务迁移到 `.ts`：
    - `src/services/bootstrap/fulfillment-bootstrap-service.ts`
133. 核心履约 profile 初始化、配置绑定同步、SKU 绑定与商品匹配规则重建已进入 TS 编译链路；profileMap、binding 与运行时 config 补齐动态对象类型
134. Docker 内验证通过：
    - `src/services/bootstrap/fulfillment-bootstrap-service.test.js` 共 2 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
135. 后台平台配置底座模块迁移到 `.ts`：
    - `src/services/admin/platform-config/context.ts`
    - `src/services/admin/platform-config/domain.ts`
    - `src/services/admin/platform-config/mappers.ts`
    - `src/services/admin/platform-config/validation.ts`
136. 后台平台配置上下文解析、展示映射、敏感信息脱敏、履约绑定校验与重复规则检测已进入 TS 编译链路；动态配置对象补齐通用类型，`isPlainObject` 改为类型守卫
137. Docker 内验证通过：
    - `src/services/admin/platform-config/context.test.js`、`domain.test.js`、`mappers.test.js`、`validation.test.js` 共 23 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
138. 后台平台配置观察 / 查询 / 写入辅助模块迁移到 `.ts`：
    - `src/services/admin/platform-config/observed-products.ts`
    - `src/services/admin/platform-config/fulfillment.ts`
    - `src/services/admin/platform-config/writes.ts`
139. 后台观察商品列表、履约手动查询结果组装、Agiso 店铺消息配置写入与 Cloudtentacles 来源配置归一化已进入 TS 编译链路；查询依赖、payload 与配置 map 补齐动态对象类型
140. Docker 内验证通过：
    - `src/services/admin/platform-config/observed-products.test.js`、`fulfillment.test.js`、`writes.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
141. 后台 Cloudtentacles 配置展示模块迁移到 `.ts`：
    - `src/services/admin/platform-config/cloudtentacles.ts`
142. Cloudtentacles 凭据 payload、会话 payload、持久化 session、登录 / 校验响应摘要已进入 TS 编译链路；来源、会话与响应对象补齐动态类型
143. Docker 内验证通过：
    - `src/services/admin/platform-config/cloudtentacles.test.js` 共 6 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
144. 后台平台配置薄服务包装层迁移到 `.ts`：
    - `src/services/admin/platform-config/agiso-service.ts`
    - `src/services/admin/platform-config/kuaishou-eticket-service.ts`
    - `src/services/admin/platform-config/kuaishou-cloud-fulfillment-service.ts`
    - `src/services/admin/platform-config/ninetyone-service.ts`
145. Agiso 店铺配置、快手电子券配置 / 查询 / 核销、快手 Cloud 履约配置、91 卡券后台订单操作入口已进入 TS 编译链路；payload / query 补齐动态对象类型
146. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
147. 后台平台配置聚合入口、履约绑定服务、通知 / 定时任务服务迁移到 `.ts`：
    - `src/services/admin/platform-config/service.ts`
    - `src/services/admin/platform-config/fulfillment-bindings-service.ts`
    - `src/services/admin/platform-config/notification-service.ts`
148. 旧履约绑定读写 / 手动订单查询、通知配置更新、测试通知、定时任务运行入口已进入 TS 编译链路；写入 payload、查询 payload、动态配置 map 与 jobId 补齐类型
149. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
150. 后台 Cloudtentacles 配置编排服务迁移到 `.ts`：
    - `src/services/admin/platform-config/cloudtentacles-service.ts`
151. Cloudtentacles 来源列表 / 批量保存 / 单来源保存 / 删除、短信登录、会话校验、商品目录、背包、虚拟号、完整调试流程后台入口已进入 TS 编译链路；各入口 payload 与 session map 补齐类型
152. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
153. Cloudtentacles 平台底座模块迁移到 `.ts`：
    - `src/services/platforms/cloudtentacles/shared.ts`
    - `src/services/platforms/cloudtentacles/source-config-service.ts`
    - `src/services/platforms/cloudtentacles/session-state-service.ts`
    - `src/services/platforms/cloudtentacles/crypto-service.ts`
154. Cloudtentacles 运行时配置解析、URL / headers 构造、来源配置读写、会话状态读写、RSA 加密入口已进入 TS 编译链路；动态配置、会话 map、加密 payload 与 header map 补齐类型
155. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
156. Cloudtentacles 平台 HTTP / 商品目录 / 背包 / 会话模块迁移到 `.ts`：
    - `src/services/platforms/cloudtentacles/http-client.ts`
    - `src/services/platforms/cloudtentacles/catalog-service.ts`
    - `src/services/platforms/cloudtentacles/knapsack-service.ts`
    - `src/services/platforms/cloudtentacles/session-service.ts`
157. Cloudtentacles Node HTTP 请求封装、业务错误通知、资产 / 分类 / SKU 查询、SKU 购买 / 发货、背包查询、短信验证码、登录与会话校验已进入 TS 编译链路；请求 options、HTTP response、payload 和返回数据映射补齐类型
158. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
159. Cloudtentacles 完整调试流程服务迁移到 `.ts`：
    - `src/services/platforms/cloudtentacles/debug-flow-service.ts`
160. Cloudtentacles 余额 / SKU / 背包校验、购买、申请虚拟号、生成登录码、获取验证码、校验验证码、获取兑换链接的后台调试串联流程已进入 TS 编译链路；流程 payload、步骤 runner、重试 options、错误包装补齐类型
161. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
162. Cloudtentacles 虚拟号服务迁移到 `.ts`：
    - `src/services/platforms/cloudtentacles/virtual-number-service.ts`
163. Cloudtentacles 虚拟号列表、申请、生成登录码、获取验证码、校验验证码、兑换链接、绑定信息、退还号码、AMS 兑换链接探测已进入 TS 编译链路；虚拟号 payload、AMS 签名参数、探测 response、header adapter 与动态响应对象补齐类型
164. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
165. 通知服务模块迁移到 `.ts`：
    - `src/services/notification/config-service.ts`
    - `src/services/notification/bark-service.ts`
    - `src/services/notification/notification-service.ts`
    - `src/services/notification/domain-notifications.ts`
166. Bark 通知发送、通知配置读写、内部通知分发、业务域告警与冷却控制已进入 TS 编译链路；Bark input、通知 payload、接收人配置、错误上下文与冷却 map 补齐类型
167. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
168. Scheduler 定时任务模块迁移到 `.ts`：
    - `src/services/scheduler/config-service.ts`
    - `src/services/scheduler/scheduler-service.ts`
    - `src/services/scheduler/cloudtentacles-health-job.ts`
169. 定时任务配置归一化、运行态缓存、立即执行、重载调度、Cloudtentacles 余额健康检查与告警已进入 TS 编译链路；job 配置、timer map、runtime state、健康检查 payload 补齐类型
170. Docker 内验证通过：
    - `src/services/admin/platform-config/*.test.js` 共 37 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
171. 快手 Cloud 核心履约任务服务迁移到 `.ts`：
    - `src/services/fulfillment/kuaishou-cloud-task-service.ts`
172. 快手 Cloud 绑定准备、过期链接刷新、绑定链接探测、角色信息刷新、cloudtentacles 发货、退还虚拟号、快手电子券核销、履约 flow 归一化与敏感信息脱敏已进入 TS 编译链路；入口 options、失败标记 input 与虚拟号准备 input 补齐动态对象类型
173. Docker 内验证通过：
    - `src/services/order/kuaishou-cloud-fulfillment-config-service.test.js` 相关用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
174. 后台 Admin 查询 / 审计 / 仪表盘 / 消息投递 / 写入口迁移到 `.ts`：
    - `src/services/admin/admin-query-utils.ts`
    - `src/services/admin/admin-audit-service.ts`
    - `src/services/admin/admin-dashboard-service.ts`
    - `src/services/admin/admin-message-delivery-service.ts`
    - `src/services/admin/admin-write-service.ts`
175. Admin 分页与日期查询归一化、审计日志写入 / 查询、仪表盘汇总、消息投递列表、后台写操作聚合入口已进入 TS 编译链路；query、session、payload、映射 row 补齐动态对象类型
176. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
177. 后台 Admin 读侧聚合与订单 / 库存 / Webhook 映射 helper 迁移到 `.ts`：
    - `src/services/admin/admin-inventory-read-helpers.ts`
    - `src/services/admin/admin-order-read-helpers.ts`
    - `src/services/admin/admin-webhook-read-helpers.ts`
    - `src/services/admin/admin-service.ts`
178. Admin 库存占用任务映射、订单商品摘要、Webhook 原始 payload 展开与后台服务聚合出口已进入 TS 编译链路；列表 row、Webhook options、动态 JSON record 与导出入口补齐类型
179. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
180. 后台 Admin 写侧共享 helper 与 Webhook 重放入口迁移到 `.ts`：
    - `src/services/admin/write/shared.ts`
    - `src/services/admin/write/webhook-events.ts`
181. Admin 脱敏、任务库存组解析、辅助领取权限校验、任务 claim 链接补齐、手动发货结果归一化、Webhook 重放入口已进入 TS 编译链路；任务 row、viewer context、错误对象、entity id 与重放响应补齐类型
182. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
183. 后台 Admin 库存写操作迁移到 `.ts`：
    - `src/services/admin/write/inventory.ts`
184. Admin 库存新增、批量导入、释放预占库存、作废库存与导入行去重已进入 TS 编译链路；创建 / 导入 / 作废输入、entity id、mutation response、导入行规范化结果与库存 row 补齐类型
185. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
186. 后台 Admin 读侧共享上下文 / 权限 helper 迁移到 `.ts`：
    - `src/services/admin/admin-read-shared-helpers.ts`
    - `src/services/admin/write/shared.ts`
187. Admin viewer context、敏感信息可见性、任务上下文解析、订单商品标题 / 发货模式解析、辅助领取权限判断、库存组访问控制与兑换 resolution 映射已进入 TS 编译链路；任务 row、订单商品 row、session input、动态 JSON record 与 viewer context 补齐类型，并让写侧 helper 复用共享 viewer context 类型
188. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
189. 后台 Admin 任务读侧映射 helper 迁移到 `.ts`：
    - `src/services/admin/admin-task-read-helpers.ts`
190. Admin 任务摘要 / 列表项 / 操作 payload、任务事件、任务库存绑定、任务绑定汇总 map、订单绑定状态汇总与 Agiso 自动发货订单摘要已进入 TS 编译链路；任务 row、绑定 row、事件 row、viewer context、绑定 summary、自动发货 summary 与动态 metadata 补齐类型
191. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
192. 后台 Admin 读服务聚合入口迁移到 `.ts`：
    - `src/services/admin/admin-read-service.ts`
193. Admin 订单列表 / 详情、任务列表 / 详情 / 截图、库存列表 / SKU 建议、Webhook 列表 / 详情聚合入口已进入 TS 编译链路；列表 query、viewer session、entity id、分页响应模型与详情动态聚合对象补齐类型
194. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
195. 后台 Admin 任务写操作迁移到 `.ts`：
    - `src/services/admin/write/task-actions.ts`
196. Admin 任务库存释放、绑定释放、领取链接重建、半自动确认 / 兑换、关闭任务、转人工复核、重试、人工履约回写已进入 TS 编译链路；entity id、viewer session、手动履约 input、action response、binding release response、依赖注入 close deps 与 task patch 补齐类型
197. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
198. 后台 Admin 快手 Cloud 写侧 helper / actions 迁移到 `.ts`：
    - `src/services/admin/write/kuaishou-cloud-helpers.ts`
    - `src/services/admin/write/kuaishou-cloud-actions.ts`
199. 快手 Cloud flow 规范化、SKU / 背包资源匹配、VN Key 候选、绑定资源准备与回滚、准备绑定、发货、刷新角色、退号和快手核销动作已进入 TS 编译链路；cloud context、flow、SKU-like item、binding resources、prepared bind resource、dispatch input 与 action response 补齐类型
200. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
201. 后台 Admin 鉴权与人工兑换服务迁移到 `.ts`：
    - `src/services/admin/admin-auth-service.ts`
    - `src/services/admin/admin-manual-redeem-service.ts`
202. 后台默认用户初始化、登录 / session token 验证、用户管理、角色 / 状态归一化、人工兑换任务创建、人工兑换 claim session 包装、确认角色 / 兑换 / 关闭操作已进入 TS 编译链路；admin user row、session、role/status、manual redeem input、entity id、viewer session 与动态详情响应补齐类型
203. Docker 内验证通过：
    - `src/services/admin/*.test.js` 共 8 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
204. `src/services/admin` 目录下非测试 `.js` 服务文件已全部迁移为 `.ts`
205. 快手电子券平台服务迁移到 `.ts`：
    - `src/services/platforms/kuaishou-eticket/shared.ts`
    - `src/services/platforms/kuaishou-eticket/http-client.ts`
    - `src/services/platforms/kuaishou-eticket/source-config-service.ts`
    - `src/services/platforms/kuaishou-eticket/info-service.ts`
    - `src/services/platforms/kuaishou-eticket/consume-service.ts`
206. 快手小店核销配置、Node HTTP 请求、店铺来源配置读写、店铺稳定信息查询、电子券详情查询与核销 payload / result 映射已进入 TS 编译链路；config、headers、HTTP response、source/shop config、detail result 与动态 payload 补齐类型
207. Docker 内验证通过：
    - `src/services/platforms/kuaishou-eticket/*.test.js` 共 4 个用例通过
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
208. `src/services` 目录下非测试 `.js` 服务文件已全部迁移为 `.ts`
209. 第一批后台 Admin 路由迁移到 `.ts`：
    - `src/routes/admin/shared.ts`
    - `src/routes/admin/auth.ts`
    - `src/routes/admin/dashboard.ts`
    - `src/routes/admin/users.ts`
210. 后台 JSON / 文件 handler、session 鉴权中间件、角色中间件、登录 / session / logout、概览摘要和后台用户管理路由已进入 TS 编译链路；Admin session、route request、审计 payload、用户 mutation result 与 handler options 补齐类型，并导出真实 `AdminSession` 给路由层复用
211. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
212. 第二批后台 Admin 读侧 / 库存路由迁移到 `.ts`：
    - `src/routes/admin/orders.ts`
    - `src/routes/admin/inventory.ts`
    - `src/routes/admin/message-deliveries.ts`
    - `src/routes/admin/webhook-events.ts`
    - `src/routes/admin/audit-logs.ts`
213. 后台订单列表 / 详情、库存列表 / SKU 建议 / 写操作、消息发送记录、Webhook 事件列表 / 详情 / 重放、审计日志路由已进入 TS 编译链路；route query、params、body、库存 mutation response 与 webhook replay response 补齐类型，审计 payload 缩进同步整理
214. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
215. 后台人工兑换路由迁移到 `.ts`：
    - `src/routes/admin/manual-redeem.ts`
216. 人工兑换 SKU 建议、任务创建 / 详情、登录会话创建 / 摘要 / 刷新 / 关闭、确认角色、启动兑换和关闭任务路由已进入 TS 编译链路；route query、params、body、session body 与人工兑换 mutation audit result 补齐类型
217. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
218. 后台任务管理路由迁移到 `.ts`：
    - `src/routes/admin/tasks.ts`
219. 后台任务列表 / 详情 / 截图、重试、库存释放、绑定释放、领取链接重建、客服确认 / 兑换、关闭、转人工、人工履约回写、快手 Cloud 准备 / 刷新角色 / 发货 / 退号路由已进入 TS 编译链路；route query、params、manual dispatch body、kuaishou cloud dispatch body、task action response、binding release response 与 manual dispatch response 补齐类型，并收敛 taskId / bindingId 解析 helper
220. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
221. 后台平台配置路由迁移到 `.ts`：
    - `src/routes/admin/platform-config.ts`
222. Agiso 店铺、通知、定时任务、快手电子券、91 卡券订单、cloudtentacles 来源 / 登录 / 商品 / 背包 / 虚拟号 / debug flow、履约绑定和快手 Cloud 履约配置路由已进入 TS 编译链路；route body / params、Agiso 保存响应和审计动态结果补齐类型，并移除旧 JSDoc cast
223. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
224. `src/routes/admin` 目录下非测试 `.js` 路由文件已全部迁移为 `.ts`
225. 外层 API 路由迁移到 `.ts`：
    - `src/routes/admin.ts`
    - `src/routes/claims.ts`
    - `src/routes/open-91.ts`
    - `src/routes/tencent.ts`
    - `src/routes/webhooks.ts`
226. Admin 聚合路由、领取页 / 快手 Cloud 领取动作、91 卡券开放接口、腾讯浏览器会话接口和 Agiso webhook 入口已进入 TS 编译链路；现阶段保持路由编排行为不变，依赖已迁移服务层类型进行约束
227. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
228. `src/routes` 目录下非测试 `.js` 路由文件已全部迁移为 `.ts`
229. 后端入口与数据库迁移脚本迁移到 `.ts`：
    - `src/index.ts`
    - `src/db/migrate.ts`
230. `package.json` 源码运行脚本切到 `.ts` 入口：`dev`、`start:src` 和 `db:migrate`；依赖源码 TS 的开发脚本 `seed:dev-data`、`cleanup:dev-data`、`agiso:auto-delivery:test` 改由 `tsx` 执行，避免 plain node 直接加载源码 TS 失败
231. 入口启动、健康检查、核心 bootstrap、browser / OCR 预热、优雅关闭、进程异常记录和 migration CLI 已进入 TS 编译链路；logger 的 detail 参数补齐可省略签名，HTTP server close promise 补齐 `Promise<void>`
232. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
233. `apps/backend/src` 目录下非测试 `.js` 文件已全部迁移为 `.ts`
234. 后端开发脚本迁移到 `.ts`：
    - `scripts/cleanup-dev-data.ts`
    - `scripts/seed-dev-data.ts`
    - `scripts/test-agiso-auto-delivery.ts`
235. `package.json` 中 `cleanup:dev-data`、`seed:dev-data`、`agiso:auto-delivery:test` 已指向 `.ts` 脚本；脚本帮助文案同步改为 npm script 形式
236. Docker 内验证通过：
    - `npm run cleanup:dev-data -- --help`
    - `npm run seed:dev-data -- --help`
    - `npm run agiso:auto-delivery:test -- --help`
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
237. 除 `dist`、`node_modules` 和测试文件外，`apps/backend` 目录下非测试 `.js` 文件已全部迁移为 `.ts`
238. 后端测试文件迁移到 `.test.ts`：
    - `src/**/*.test.ts` 共 33 个测试文件
239. `npm test` 改为同时查找 `.test.ts` / `.test.js`，`tsconfig.json` 与 `tsconfig.build.json` 排除 `.test.ts`，避免测试 mock 数据被生产编译约束
240. Docker 内验证通过：
    - `npm run typecheck`
    - `npm run build`
    - `npm test` 共 139 个用例通过
241. 除 `dist` 和 `node_modules` 外，`apps/backend` 目录下 `.js` 文件已全部迁移完成

## 下一步建议

第一批继续推进时，建议按这个顺序：

1. 继续迁移服务层中最核心、最常改的订单 / 履约 / claim 模块
2. 逐步移除服务层 `@ts-nocheck`，优先处理 webhook service、自动发货

## 执行原则

- 不为迁移而迁移，优先迁移最常改、最容易改坏的链路
- 不追求一口气全量改 `.ts`
- 优先建立“新代码进入类型系统”的机制
- 每一步都要求可回滚、可验证、不中断现有开发流
