refactor: converge hwpod node-ops channel

This commit is contained in:
Codex Agent
2026-06-05 16:47:50 +08:00
parent 8a1cd5c725
commit 3e7131f6ab
117 changed files with 1056 additions and 19327 deletions
+15 -26
View File
@@ -8,17 +8,10 @@
登录鉴权目标见 [spec-v02-auth.md](spec-v02-auth.md):CLI 必须是一等纯 CLI 体验,默认从环境变量 `HWLAB_API_KEY` 读取用户 API key,并发送 `Authorization: Bearer hwl_live_...``client auth login --username ...`、本地 cookie session 和 profile cookie 只属于当前实现的 legacy 兼容入口;后续目标验收不得要求 CLI 打开浏览器、跳转 Web 或输入 Keycloak 密码。
正式复现和验收必须通过运行时装配解析 endpoint,而不是在命令里手动传 URL。标准环境是 `HWLAB_RUNTIME_NAMESPACE=hwlab-v02``HWLAB_RUNTIME_LANE=v02``HWLAB_RUNTIME_ENDPOINT_LOCKED=1``HWLAB_CODE_AGENT_ASSEMBLED_RUNTIME=1`CLI 输出必须包含 `runtimeEndpoint.source=runtime-namespace``runtimeEndpoint.explicitOverride=false` 和解析出的 `baseUrl``--base-url``--api-base-url``HWLAB_CLIENT_BASE_URL` 或等价显式 URL 只允许在本地 debug 且未设置 endpoint locked 时使用;issue 复现、最终验收、Web 等价 CLI、AgentRun runner、迁移期 `device-pod-cli` shim`hwpod` 都不得靠人工判断 17666/19666/19667。
正式复现和验收必须通过运行时装配解析 endpoint,而不是在命令里手动传 URL。标准环境是 `HWLAB_RUNTIME_NAMESPACE=hwlab-v02``HWLAB_RUNTIME_LANE=v02``HWLAB_RUNTIME_ENDPOINT_LOCKED=1``HWLAB_CODE_AGENT_ASSEMBLED_RUNTIME=1`CLI 输出必须包含 `runtimeEndpoint.source=runtime-namespace``runtimeEndpoint.explicitOverride=false` 和解析出的 `baseUrl``--base-url``--api-base-url``HWLAB_CLIENT_BASE_URL` 或等价显式 URL 只允许在本地 debug 且未设置 endpoint locked 时使用;issue 复现、最终验收、Web 等价 CLI、AgentRun runner 和 `hwpod` 都不得靠人工判断 17666/19666/19667。
当前阶段的 Web 等价 CLI 验收默认使用 `admin` 的默认账号 workspace:不要为了避免污染而临时创建测试账号、切换 profile、指定临时 `projectId` 或隔离 workspace。需要清理上下文时直接通过 `client workbench restore/status/reset --confirm` 作用于 admin 默认 workspace,并在 issue 评论记录 reset、traceId、workspace revision 和恢复结果。只有用户明确要求多账号/多 profile 隔离验证,或目标功能本身就是账号隔离/profile 行为时,才使用 `--profile`、新增账号或非默认 `projectId`
## 当前实现状态
- `hwlab-cli client auth status|whoami` 当前以 `HWLAB_API_KEY``/v1/users/me` 恢复用户 actor;默认输出只显示 endpoint、key prefix 和脱敏用户摘要,不保存或打印完整 API key。
- `client access ...` 当前是 Admin Access WebUI 的非视觉同路径入口,覆盖 summary、users、HWPOD/profile relation grant/revoke、tool grant/revoke 和 check;它只打 Cloud Web 同源 path,不直连 OpenFGA 或手动传 OpenFGA token。
- `hwpod` 在 AgentRun runner 中使用 `HWLAB_RUNTIME_API_URL` 直达 cloud-api,并携带当前 owner 的用户级 `HWLAB_API_KEY`。内部执行凭据不属于 CLI auth 状态,也不得通过 CLI profile、state file 或 runner env 暴露。
- CLI 变更是 source-only 短连接工具变更,不创建常驻 Service、镜像、Job template 或 GitOps 对象;测试和验收只表达当前 Cloud Web/API/OpenFGA 权限行为,不保留已移除路径的断言。
## Code Agent session 手动化
Code Agent session 是显式资源,不再由普通 `client agent send`、Workbench composer、`--from-trace` 或账号 workspace 自动创建、滚动或替换。账号 workspace 只能记录当前显式选中的 session、最近 trace 和展示状态;它不是隐式 session factory。
@@ -34,19 +27,19 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
## 在系统中的职责划分
- 提供 WEB 等价的非视觉业务入口:登录鉴权、显式 Code Agent session 管理、HWPOD 看板、Admin Access 授权管理、Code Agent 对话、trace/result 轮询、logout 和工作台 live summary。
- 提供 WEB 等价的非视觉业务入口:登录鉴权、显式 Code Agent session 管理、HWPOD node-ops 状态、Admin Access 授权管理、Code Agent 对话、trace/result 轮询、logout 和工作台 live summary。
- 只走 Cloud Web 同源 API surface;正式运行时由 `HWLAB_RUNTIME_*` 装配出当前 lane 的 Web/API endpoint,失败时必须 fail closed,不能静默退回 legacy DEV 入口。
- Web/CLI 路径一致性优先于继续 Web 修复。Cloud Web 暴露 Code Agent、AgentRun、continuation、steer、trace/result 或 provider 问题后,必须先能用 runtime namespace/lane 装配出的 `bun tools/hwlab-cli/bin/hwlab-cli.ts client agent send/result/trace/inspect/steer ...` 对同一 Cloud Web origin、同一 `/v1/agent/chat*`、同一 `conversationId/sessionId/threadId/retryOf` 复现或解释,再继续修 Web 状态机。Cloud API 只用于显式 admin/setup/gateway 诊断,不得替代 WEB 同源路径验收。
- 从 Web trace 回放 Code Agent 问题时,优先用 `client agent inspect --trace-id <traceId>` 读取 Cloud Web 的 `/v1/agent/chat/inspect`,输出 trace 所属 `conversationId/sessionId/threadId`、session 状态和 `retryOf` 建议;`client agent send --from-trace <traceId>` 只能作为显式复现该 trace 所属 session 的入口,不能自动创建、滚动或替换 session。inspect 缺失或 session 已 failed/stale 时,CLI 必须返回结构化 blocker 和显式新建 session 建议。
- 默认业务子命令不直连 Postgres、Kubernetes Service、Secret、残留执行 Service、gateway RPC 或本地 fixture;需要鉴权的请求优先使用 `HWLAB_API_KEY` 生成的 `Authorization: Bearer hwl_live_...`legacy/debug 才使用 `/auth/*` 返回的 cookie 或显式 `--cookie`。唯一例外是 `client gateway` 诊断族:它使用同一 runtime endpoint resolver 定位 Cloud API,用于短连接观测 gateway session、单次 shell invoke 和 transport 压测;该入口只验证底层传输稳定性,不替代 Web 用户流程授权,也不发布镜像或常驻服务。显式 API URL 只作为 unlocked local debug 入口。
- 默认业务子命令不直连 Postgres、Kubernetes Service、Secret、内部执行 Service、gateway RPC 或本地 fixture;需要鉴权的请求优先使用 `HWLAB_API_KEY` 生成的 `Authorization: Bearer hwl_live_...`legacy/debug 才使用 `/auth/*` 返回的 cookie 或显式 `--cookie`。唯一例外是 `client gateway` 诊断族:它使用同一 runtime endpoint resolver 定位 Cloud API,用于短连接观测 gateway session、单次 shell invoke 和 transport 压测;该入口只验证底层传输稳定性,不替代 Web 用户流程授权,也不发布镜像或常驻服务。显式 API URL 只作为 unlocked local debug 入口。
- Pod 内透传执行不放进 `hwlab-cli`;需要进入正在工作的 Code Agent/Cloud API pod 时,`hwlab-cli` 只查询并输出 UniDesk 标准 route,实际透传由 UniDesk `bun scripts/cli.ts ssh 'G14:k3s:hwlab-v02:pod:<pod>:<container>' ...` 完成。`pod:` 是 route 语法,`/` 只用于 pod 内文件系统路径。
- `client runtime routes` 必须按当前运行 profile/lane 的数据生成 UniDesk `pod:` route;实现不得硬编码 `dev``v0.2``v0.3`、namespace 或 catalog path。新增版本只允许通过 `deploy.json.lanes[profile]` 声明 namespace、artifact catalog 和 service overrides,不为每个版本新增代码分支。
- 运行时不做内部证明型校验、旧健康诊断或重断言;CI/CD 只保留能证明代码可构建、语法正确和最小冒烟可用的校验。功能正确性通过 `hwlab-cli client` 短连接真实业务 E2E 暴露和修复。
- 专用子命令覆盖高频用户工作台;`client request METHOD /path` 覆盖 WEB 同源代理允许的其他非视觉 API。`client request` 只接受以 `/` 开头的 Cloud Web 相对路径,禁止绝对 URL,避免绕过 Cloud Web 直接打内部服务。
- `client access ...` 是 Admin Access 页面的同路径 CLI,不直连 OpenFGA,不手动传 OpenFGA token,不把 `19667` Cloud API 当作 Web 等价验收路径。所有授权读写都必须输出 runtimeEndpoint、route、actor、mode、decision 和 effective matrix 摘要。
- `client gateway pressure`HWPOD/gateway 高频故障的真实业务传输压测入口;必须覆盖 small stdout、大 stdout、长单行 stdout、stderr flood、结构化 timeout 和超出 gateway inflight 上限的并发请求。所有场景必须返回 JSON、HTTP/route/traceId/requestId、字节数、truncated 标记、sha256 和 bounded preview;失败必须明确是 `http_*``stdout_not_truncated``stderr_not_truncated``timeout_not_observed``structured_gateway_busy` 等可定位原因,禁止无输出、长时间黑洞或只靠 shell pipe 截断。
- `client gateway pressure` 是 gateway/transport 高频故障的真实业务传输压测入口;必须覆盖 small stdout、大 stdout、长单行 stdout、stderr flood、结构化 timeout 和超出 gateway inflight 上限的并发请求。所有场景必须返回 JSON、HTTP/route/traceId/requestId、字节数、truncated 标记、sha256 和 bounded preview;失败必须明确是 `http_*``stdout_not_truncated``stderr_not_truncated``timeout_not_observed``structured_gateway_busy` 等可定位原因,禁止无输出、长时间黑洞或只靠 shell pipe 截断。
- 输出默认是 JSON;任何失败都要有 `ok:false``action``status`、HTTP 状态、route 和可定位错误,不允许无 stdout 成功。可能返回大对象的 `client` 子命令默认返回紧凑摘要,避免高频排障输出爆炸;需要完整响应体时显式加 `--full`
- `hwpod` AgentRun runner 中设备 API 标准短入口,必须自动使用装配的 `HWLAB_RUNTIME_API_URL` 直达 `hwlab-cloud-api`,并使用映射到当前 Code Agent session owner 的 `HWLAB_API_KEY`迁移期 `device-pod-cli` 只作为 shim,不是当前概念入口。设备 API 不能把 Cloud Web 同源代理当作通道,也不能手动传 URL 或 session token。`job output` 默认必须返回紧凑 JSON:保留 job/status/blocker/freshness/text/evidence 摘要,省略嵌套 gateway dispatch 和长命令;需要完整 payload 时显式加 `--full`。Code Agent 和人工不得用 `| head``grep` 或 shell 管道作为默认输出压缩方式,避免 stdout pipe、子进程信号转发或长输出造成 commandExecution 黑洞。
- `hwpod` AgentRun runner 中设备 API 标准短入口,必须自动使用装配的 `HWLAB_RUNTIME_API_URL` 直达 `hwlab-cloud-api`,并使用映射到当前 Code Agent session owner 的 `HWLAB_API_KEY`;不能把 Cloud Web 同源代理当作设备 API 通道,也不能手动传 URL 或 session token。HWPOD CLI 默认必须返回紧凑 JSON:保留 action/status/blocker/nodeOps/trace 摘要,省略长输出;需要完整 payload 时显式加 `--full`。Code Agent 和人工不得用 `| head``grep` 或 shell 管道作为默认输出压缩方式,避免 stdout pipe、子进程信号转发或长输出造成 commandExecution 黑洞。
- Code Agent 交互必须默认暴露 `traceId``resultUrl`、终态和 assistant 回复文本摘要;不能要求用户先拉全量 trace 再手工查找回复。
- CLI 本地登录态必须支持 `--profile NAME` 隔离,同一 base URL 下不同 profile 写入 `.state/hwlab-cli/profiles/<base-url-hash>/<profile>.json`。切换到其他账号再切回原账号时,`client workbench restore/status` 必须从服务端账号 workspace 恢复之前的 `workspaceId``conversationId``sessionId``threadId``activeTraceId` 和 revision,而不是只依赖本地文件。
- `client workbench restore/status/watch/reset` 是账号 workspace 的非视觉入口:`restore/status` 对应 `GET /v1/workbench/workspace``watch` 对应 `/events?afterRevision=``reset --confirm` 对应服务端 reset。输出必须显示 workspace revision、selected conversation/session、active trace 和本地 state file,且不得保存 password、session token 原文以外的 Secret 值。
@@ -80,20 +73,16 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
| `hwlab-cli client auth session` | `GET /auth/session` | Web session debug。 |
| `hwlab-cli client auth profiles` | 本地状态读取 | 列出同一 base URL 下的本地 profile state,用于账号切换可见性。 |
| `hwlab-cli client auth logout` | `POST /auth/logout` | 撤销 server session 并清理本地 cookie。 |
| `hwlab-cli client access summary` | `GET /v1/admin/access/summary` | Admin Access 总览,显示 OpenFGA mode/readiness/store/model、用户/tool/HWPOD 数量和 mismatch 摘要。 |
| `hwlab-cli client access summary` | `GET /v1/admin/access/summary` | Admin Access 总览,显示 OpenFGA mode/readiness/store/model、用户/tool 数量和 mismatch 摘要。 |
| `hwlab-cli client access users list` | `GET /v1/admin/access/users` | 列出用户、role/status、Keycloak 绑定摘要和 effective capability 摘要。 |
| `hwlab-cli client access users inspect USER` | `GET /v1/admin/access/users/{userId}` | 查看单个用户的 HWPOD/profile、agent session 和 tool 权限矩阵。 |
| `hwlab-cli client access users inspect USER` | `GET /v1/admin/access/users/{userId}` | 查看单个用户的 agent session 和 tool 权限矩阵。 |
| `hwlab-cli client access users set-role USER --role admin|user` | `PATCH /v1/admin/access/users/{userId}` | 更新用户 role/status,并同步 OpenFGA admin tuple。 |
| `hwlab-cli client access device-pods grant/revoke USER POD --relation REL` | `PUT/DELETE /v1/admin/access/users/{userId}/device-pods/{devicePodId}/{relation}` | 迁移期 API path;授予或撤销 HWPOD/profile 的 `viewer/operator/profile_editor/job_submitter` 等 relation。 |
| `hwlab-cli client access tools grant/revoke USER TOOL` | `PUT/DELETE /v1/admin/access/users/{userId}/tools/{toolId}/can-use` | 授予或撤销 `hwpod``unidesk_ssh``trans_cmd`、GitHub 写工具等 capability。 |
| `hwlab-cli client access check --user USER --relation REL --object OBJECT` | `POST /v1/admin/access/check` | 管理员调试单次 authorization check,输出 decision 和 redacted actor/object。 |
| `hwlab-cli client provider-profiles list` | `GET /v1/admin/provider-profiles` | 管理页的非视觉状态入口;输出 actor、profile、SecretRef、resourceVersion、hash 后缀和最近验证结果,不输出 API Key 或 Secret data。 |
| `hwlab-cli client provider-profiles set-key PROFILE --key-stdin` | `PUT /v1/admin/provider-profiles/{profile}/credential` | 从 stdin 写入 provider API KeyCloud API 鉴权后委托 AgentRun;默认只输出 resourceVersion/hash 后缀和 failureKind。 |
| `hwlab-cli client provider-profiles validate PROFILE --wait` | `POST /v1/admin/provider-profiles/{profile}/validate` + `GET /validations/{id}` | 触发 provider canary 并短连接轮询,输出 validationId、runId、commandId、jobName、traceId、status、failureKind 和 redacted bridge 摘要。 |
| `hwlab-cli client device-pods list` | `GET /v1/device-pods` | 迁移期 HWPOD 列表 API path;CLI 当前命名残留,目标概念是 `hwpod`。 |
| `hwlab-cli client device-pods status POD` | `GET /v1/device-pods/{pod}/status` | 迁移期 HWPOD status API pathCLI 当前命名残留,目标概念是 `hwpod`。 |
| `hwlab-cli client device-pods events POD` | `GET /v1/device-pods/{pod}/events` | 对应纯文本事件流。 |
| `hwlab-cli client device-pods probe POD` | `/debug-probe/chip-id``/io-probe/uart/1``/tail` | 对应 Target/Debug/IO 摘要。 |
| `hwlab-cli client request POST /v1/hwpod-node-ops` | `POST /v1/hwpod-node-ops` | HWPOD node-ops 同路径 smokeCode Agent 侧正式业务入口仍是 `hwpod`,由 `hwpod-compiler-cli` 生成 node-ops。 |
| `hwlab-cli client runtime routes` | `GET /v1/live-builds` | 查询当前工作面 pod,并输出 UniDesk 标准 `pod:` route;不执行透传、不调用 kubectl、不内嵌 UniDesk。 |
| `hwlab-cli client gateway sessions` | `GET Cloud API /v1/gateway/sessions` | 显式 Cloud API 诊断入口,观察 gateway online/stale、inflight 和 capability;默认不带 Web cookie。 |
| `hwlab-cli client gateway invoke` | `POST Cloud API /v1/rpc/hardware.invoke.shell` | 显式 Cloud API 诊断入口,执行一次 bounded shell dispatch 并返回结构化 dispatch 摘要。 |
@@ -108,7 +97,7 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
| `hwlab-cli client harness submit` | `POST /v1/agent/chat` | G14 harness-ops 的短连接提交入口,默认 provider profile 为 `deepseek`,返回 trace/result URL`harness-ops``harness-opt` 是同义别名。 |
| `hwlab-cli client harness wait/result/trace` | `GET /v1/agent/chat/result/{trace}``GET /trace/{trace}` | 轮询或读取一次 Code Agent 结果和 trace;单次 wait 最长 60 秒。 |
| `hwlab-cli client harness audit` | `GET /v1/agent/chat/trace/{trace}` 或本地 trace file | 只输出工具摩擦信号,辅助发现应补的主 CLI/HWPOD 操作;不是运行时 gate。 |
| `hwlab-cli client workbench summary` | `/health/live``/v1``/v1/live-builds``/v1/device-pods*` | 汇总 Cloud Workbench 非视觉功能面。 |
| `hwlab-cli client workbench summary` | `/health/live``/v1``/v1/live-builds``/v1/hwpod-node-ops` | 汇总 Cloud Workbench 非视觉功能面。 |
| `hwlab-cli client workbench restore/status/watch/reset` | `GET/PATCH /v1/workbench/workspace*` | 恢复、观察或重置账号级共享 workspace,支持 Web/CLI 和多 profile 共享同一账号状态。 |
| `hwlab-cli client rpc METHOD [--full]` | `POST /json-rpc` | 像 Web `callRpc` 一样自动生成 `id``traceId``meta`,覆盖 `system.health``cloud.adapter.describe` 等 JSON-RPC 非视觉能力。 |
| `hwlab-cli client request METHOD /path [--full]` | Cloud Web 同源相对路径 | 覆盖 `/v1/access/status``/v1/setup/status``/v1/diagnostics/gate``/v1/m3/status``/v1/m3/io` 等低频或新增 WEB API`/json-rpc` 优先使用 `client rpc`。 |
@@ -124,7 +113,7 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
## T2
阅读 docs/reference/spec-v02-hwlab-cli.md,然后在 `G14:/root/hwlab-v02` 用 cli 手动测试以下内容:在 runtime endpoint locked 环境下运行 `client auth session`迁移期 `client device-pods list``client device-pods status device-pod-71-freq``client workbench summary --pod-id device-pod-71-freq`,确认全部由 runtime namespace 解析到 Cloud Web 同源 API,未登录时返回认证 blocker,登录后返回真实 HWPOD/profile payload,不读取本地 fixture,也不需要手动传 URL。
阅读 docs/reference/spec-v02-hwlab-cli.md,然后在 `G14:/root/hwlab-v02` 用 cli 手动测试以下内容:在 runtime endpoint locked 环境下运行 `client auth session``client request POST /v1/hwpod-node-ops --body '{"contractVersion":"hwpod-node-ops-v1","plan":{"steps":[{"op":"node.health"}]}}'``client workbench summary`,确认全部由 runtime namespace 解析到 Cloud Web 同源 API,未登录时返回认证 blocker,登录后返回真实 HWPOD node-ops payload,不读取本地 fixture,也不需要手动传 URL。
## T3
@@ -164,7 +153,7 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
## T6
阅读 docs/reference/spec-v02-hwlab-cli.md,然后在 `G14:/root/hwlab-v02` 用 cli 手动测试以下内容:在 runtime endpoint locked 环境下运行 `hwpod job output --pod-id D601-F103-V2 <jobId>`,确认 `hwpod` 自动定位当前 lane 的 Cloud API,默认输出包含 `body.compacted=true`、状态、job 摘要和 bounded text,且不包含嵌套 `dispatch.command`;再加 `--full` 确认完整 payload 可按需展开。通过 `client harness submit` 让 Code Agent 执行同一 `hwpod job output`,确认 trace 中 commandExecution 可以完成,不需要 `| head`,也不需要手动传 URL。
阅读 docs/reference/spec-v02-hwlab-cli.md,然后在 `G14:/root/hwlab-v02` 用 cli 手动测试以下内容:在 runtime endpoint locked 环境下让 Code Agent 执行 `hwpod inspect` 或等价只读 HWPOD 命令,确认 `hwpod` 自动定位当前 lane 的 Cloud API,先调用 `hwpod-compiler-cli` 生成 `hwpod-node-ops-v1` plan,再由 Cloud API 转发到 `hwpod-node` 执行;trace 中 commandExecution 必须完成,默认输出为紧凑 JSON,不需要 `| head`,也不需要手动传 URL。
## T7
@@ -172,7 +161,7 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
## T8
阅读 docs/reference/spec-v02-hwlab-cli.md 和 docs/reference/spec-v02-openfga-authorization.md,然后在 runtime endpoint locked 环境下运行 `client access summary``client access users list``client access users inspect <user>``client access device-pods grant/revoke ...``client access tools grant/revoke ...``client access check ...`。确认所有命令都走 Cloud Web 同源 `19666` path,输出 JSON、route、actor、OpenFGA mode/decision 和 effective matrix,不输出 OpenFGA token、完整 API key 或 Secret 值。
阅读 docs/reference/spec-v02-hwlab-cli.md 和 docs/reference/spec-v02-openfga-authorization.md,然后在 runtime endpoint locked 环境下运行 `client access summary``client access users list``client access users inspect <user>``client access tools grant/revoke ...``client access check ...`。确认所有命令都走 Cloud Web 同源 `19666` path,输出 JSON、route、actor、OpenFGA mode/decision 和 effective matrix,不输出 OpenFGA token、完整 API key 或 Secret 值。
## T9
@@ -184,7 +173,7 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
| --- | --- | --- |
| 固定 repo 短连接 client | 目标状态 | `hwlab-cli``G14:/root/hwlab-v02` 或当前 v0.2 worktree 直接用 Bun 运行,不作为 runtime service。 |
| WEB 等价 API client | 目标状态 | `client` 子命令覆盖 Cloud Web 非视觉业务面。 |
| Admin Access 同路径 CLI | 已实现/持续约束 | `client access ...` 覆盖 OpenFGA summary、user matrix、grant/revoke、tool capability 和 check,必须走 Cloud Web 同源 path。 |
| Admin Access 同路径 CLI | 目标状态 | `client access ...` 覆盖 OpenFGA summary、user matrix、grant/revoke、tool capability 和 check,必须走 Cloud Web 同源 path。 |
| Provider profile 管理同路径 CLI | 目标状态 | `client provider-profiles ...` 覆盖管理页状态、API Key 写入和 canary 验证,必须走 Cloud Web 同源 path 并委托 AgentRun。 |
| 显式 Code Agent session 管理 | 目标状态 | `client agent session create|select|status|list``send` 前置;普通 `send` 不自动创建或滚动 session。 |
| WEB composer 状态机等价 | 目标状态 | `client agent composer status|submit` 复用 Web composer policy,但必须显示 sessionRequired/sessionUsable,不能自动创建或滚动 session。 |
@@ -192,8 +181,8 @@ Code Agent session 是显式资源,不再由普通 `client agent send`、Workb
| 通用同源 API request | 目标状态 | `client request` 用于追平低频和新增 WEB API,禁止绝对 URL。 |
| G14 harness-ops 短连接能力 | 目标状态 | `client harness` / `client harness-ops` / `client harness-opt` 覆盖 submit/result/trace/wait/audit,只作为业务 API client。 |
| Gateway transport 压测 | 已实现 | `client gateway pressure` 只作为显式短连接诊断入口,覆盖大输出、timeout 和并发超容量的结构化返回。 |
| HWPOD job output 紧凑输出 | 已实现 | `hwpod job output` 默认省略嵌套 dispatch`--full` 才展开完整 payload,防止 Code Agent 通过 shell pipe 压输出。 |
| 用户 API key 登录 | 已实现/持续约束 | `HWLAB_API_KEY` 是 CLI 一等登录入口;完整 key 不写入默认输出或本地 state。 |
| HWPOD CLI 紧凑输出 | 已实现 | `hwpod` 默认输出紧凑 JSON,包含 action/status/compilerInvocation/route/result 摘要,防止 Code Agent 通过 shell pipe 压输出。 |
| 用户 API key 登录 | 目标状态 | `HWLAB_API_KEY` 是 CLI 一等登录入口;完整 key 不写入默认输出或本地 state。 |
| 本地 cookie session | Legacy | `.state/hwlab-cli/session.json` 只作为现有 cookie/session 兼容,不再作为目标一等 CLI 登录体验。 |
| 账号 profile 与共享 workspace | 已实现 | `--profile` 隔离本地登录态,`client workbench` 通过服务端 `account_workspaces` 恢复同账号共享 workspace。 |
| 镜像/Service/Job template | 已废弃 | 相关 deploy、GitOps、artifact 和 Tekton 口径必须删除。 |