baa-conductor

git clone 

baa-conductor / coordination / tasks / done
im_wower  ·  2026-03-22

T-020-status-host.md

  1---
  2task_id: T-020
  3title: Status API 本地宿主进程
  4status: done
  5branch: feat/T-020-status-host
  6repo: /Users/george/code/baa-conductor
  7base_ref: main@458d7cf
  8depends_on:
  9  - T-017
 10write_scope:
 11  - apps/status-api/**
 12updated_at: 2026-03-22
 13---
 14
 15# T-020 Status API 本地宿主进程
 16
 17## 目标
 18
 19`status-api` 从“可挂载运行时入口”推进到“带本地宿主进程或 node server adapter,可直接启动监听”的程度。
 20
 21## 本任务包含
 22
 23-`apps/status-api/**` 内实现本地宿主进程或 node HTTP adapter
 24-`createStatusApiRuntime()` 真正挂到监听端口
 25- 整理 `GET /healthz`、`GET /v1/status`、`GET /v1/status/ui` 的本地启动方式
 26- 补最小启动/冒烟验证
 27
 28## 本任务不包含
 29
 30- 修改 conductor-daemon
 31- 修改 control-api-worker
 32- 真实部署到 launchd
 33- D1 线上接入
 34
 35## 建议起始文件
 36
 37- `apps/status-api/src/index.ts`
 38- `apps/status-api/src/runtime.ts`
 39- `apps/status-api/src/service.ts`
 40
 41## 交付物
 42
 43- 可直接启动的 status-api 本地宿主进程
 44- 明确的本地端口和启动接口
 45- 后续 launchd 可直接复用的入口
 46
 47## 验收
 48
 49- `npx --yes pnpm --filter @baa-conductor/status-api typecheck`
 50- `npx --yes pnpm --filter @baa-conductor/status-api build`
 51- 能说明本地如何启动和访问 `healthz` / `status` / `ui`
 52
 53## 更新要求
 54
 55完成时更新 frontmatter 的:
 56
 57- `status`
 58- `base_ref`
 59- `updated_at`
 60
 61并补充下面这些内容:
 62
 63## files_changed
 64
 65- `apps/status-api/package.json`
 66- `apps/status-api/tsconfig.json`
 67- `apps/status-api/src/index.ts`
 68- `apps/status-api/src/cli.ts`
 69- `apps/status-api/src/host.ts`
 70- `apps/status-api/src/node-shims.d.ts`
 71- `coordination/tasks/T-020-status-host.md`
 72
 73## commands_run
 74
 75- `npx --yes pnpm install`
 76- `npx --yes pnpm --filter @baa-conductor/status-api typecheck`
 77- `npx --yes pnpm --filter @baa-conductor/status-api build`
 78- `npx --yes pnpm --filter @baa-conductor/status-api smoke`
 79- `node apps/status-api/dist/index.js --host 127.0.0.1 --port 4328`
 80- `curl --silent --show-error http://127.0.0.1:4328/healthz`
 81- `curl --silent --show-error http://127.0.0.1:4328/v1/status`
 82- `curl --silent --show-error http://127.0.0.1:4328/v1/status/ui | sed -n '1,8p'`
 83
 84## result
 85
 86- 已在 `apps/status-api/**` 内补齐 Node 宿主层,新增本地 HTTP request listener 与 `startStatusApiServer()`,把 `createStatusApiRuntime()` 真正挂到监听端口。
 87- 已补 `runStatusApiCli()` 与主入口直启逻辑,`node apps/status-api/dist/index.js` 现在默认监听 `127.0.0.1:4318`,可直接给 launchd 复用。
 88- 已新增包内脚本:`pnpm --filter @baa-conductor/status-api serve`、`start`、`smoke`;本地可访问 `GET /healthz`、`GET /v1/status`、`GET /v1/status/ui`。
 89- 已补最小真实 HTTP 冒烟验证:`smoke` 会拉起临时端口并验证三条 GET 路由,另外也手动确认了 `node apps/status-api/dist/index.js --host 127.0.0.1 --port 4328` 的实际监听响应。
 90
 91## risks
 92
 93- 当前宿主进程默认仍使用 `StaticStatusSnapshotLoader`,返回的是本地空快照;真实 D1 / 控制平面接线仍需后续整合任务注入。
 94- `dist/index.js` 的直启能力依赖当前统一 build 产物布局;如果后续全仓库再调整 `BAA_DIST_ENTRY` 或 shim 结构,需要同步验证直启检测逻辑。
 95
 96## next_handoff
 97
 98- 在后续整合中,把真实 snapshot loader 注入 `startStatusApiServer()` 或 CLI 启动路径,让 `/v1/status` 返回真实控制平面状态。
 99- 视 launchd/bootstrap 任务需要,在安装副本里补 `BAA_STATUS_API_HOST` / `BAA_STATUS_API_PORT` 等环境变量,或继续沿用默认 `127.0.0.1:4318`100- 如果后续希望把 status-api 嵌入到更大的 Node 宿主里,可直接复用本任务新增的 request listener / server adapter,而不必再改 service/runtime 层。
101
102开始时建议直接把 `status` 改为 `in_progress`103
104做完并推送后:
105
106- 如果等待整合,改为 `review`
107- 如果确认结束,改为 `done`