状态决定“现在可以做什么”,安全边界决定“即使能做,也不能泄露或绕过什么”。开发过程应同时满足两类约束。

Workspace 状态决策

状态能否 SSH/SCP/WebChat动作
创建中的非终态让 CLI 继续轮询;超时后用相同 Workspace ID 查询
activeWebChat 可用;SSH 仍取决于 binding/verification先运行 workspace connect;只有 bound + ssh_verified=true 才使用精确命令,留意 expires_at
failed记录 failure_code,停止连接尝试
closed终态;不能“resume”
published终态;到网站查看发布版本
cleanup_pending平台收尾中,不继续写入
close_pending平台关闭中,不继续写入
超时不是终态

WORKSPACE_TIMEOUT 只表示本次等待窗口耗尽。保留错误中的 workspace_idlast_status,随后运行 workspace status;不要重复创建。

发布、版本与 Agent 供给状态

发布 Job 与可见性是两条相关但不同的状态轴;页面展示的版本 online/offline 与 Agent 层 supply_status 又是两组不同字段。开发者日常操作以页面的 Online/Offline 为准,排查 API 时不要混写。

层级关键状态完成门
Publish Jobqueuedrunningsucceeded;或 failed/canceledsucceeded
Publicationpendingsyncingvisible;或 failedvisible
Version / UIoffline / online需要正式接受调用时,页面必须显示 Online
Agent supplysuspended / listedOnline 时还应为 listed;不要把这里写成 Online/Offline

推荐把完成条件写成:

publish_job == "succeeded"
and publication == "visible"
and version_status == "online"
and supply_status == "listed"
and real_invocation_verified == true

OAuth 登录安全

CLI 在需要认证时打开浏览器,使用四项关键防护:

凭据只进入系统安全存储

平台CLI 使用的存储
WindowsWindows Credential Manager
macOSKeychain
LinuxSecret Service(secret-tool

如果这些安全存储不可用,CLI 返回 credential_store=unavailable不会把会话明文写入普通配置文件作为 fallback。不要用自制脚本把 Token 存到项目目录、Shell 历史或环境快照。

SSH key 边界

应当

禁止

日志、截图与协作中的脱敏

控制面边界

网站与 CLI 是开发者公开控制面。CLI 0.7.3 已提供 workspace sources/connect/resumeversion webui-ports 和受控 portal 操作;写入仍只限开发者明确要求的当前动作。当前没有通用 syncworkspace close/delete/publish 子命令,不能通过猜测内部 URL、复用服务间凭据或手写数据库/API 绕过。

结构化输入与 WebUI 的敏感边界